3v4l.org

run code in 300+ PHP versions simultaneously
<?php // Basic case from the bug report echo "-- Basic case --\n"; var_dump(sprintf('%.2f', -0.001)); var_dump(sprintf('%.2f', -0.0)); // Various precisions where the value rounds to zero echo "-- Precisions rounding to zero --\n"; var_dump(sprintf('%.0f', -0.1)); var_dump(sprintf('%.0f', -0.0)); var_dump(sprintf('%.1f', -0.04)); var_dump(sprintf('%.1f', -0.001)); var_dump(sprintf('%.2f', -0.004)); var_dump(sprintf('%.2f', -0.001)); var_dump(sprintf('%.3f', -0.0004)); var_dump(sprintf('%.3f', -0.0001)); var_dump(sprintf('%.4f', -0.00004)); var_dump(sprintf('%.4f', -0.00001)); // Values that should remain negative (do NOT round to zero) echo "-- Should stay negative --\n"; var_dump(sprintf('%.2f', -0.01)); var_dump(sprintf('%.2f', -0.1)); var_dump(sprintf('%.2f', -1.5)); var_dump(sprintf('%.1f', -0.1)); var_dump(sprintf('%.0f', -1.0)); // Uppercase F format echo "-- Uppercase F --\n"; var_dump(sprintf('%.2F', -0.001)); var_dump(sprintf('%.2F', -0.01)); // Explicit positive sign should show + when value rounds to zero echo "-- Explicit sign --\n"; var_dump(sprintf('%+.2f', -0.001)); var_dump(sprintf('%+.2f', 0.001)); var_dump(sprintf('%+.2f', -0.01)); // printf output (not just sprintf) echo "-- printf --\n"; printf('%.2f', -0.001); echo "\n"; printf('%.2f', -0.01); echo "\n"; // Consistency with number_format echo "-- number_format consistency --\n"; var_dump(number_format(-0.001, 2)); var_dump(number_format(-0.01, 2)); // Very small negative values that round to zero echo "-- Very small negatives --\n"; var_dump(sprintf('%.2f', -1e-10)); var_dump(sprintf('%.2f', -PHP_FLOAT_EPSILON)); var_dump(sprintf('%.2f', -1e-100)); // Padding and width echo "-- Padding --\n"; var_dump(sprintf('%08.2f', -0.001)); var_dump(sprintf('%08.2f', -0.01));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/B60Lu
function name:  (null)
number of ops:  223
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    4     0  E >   ECHO                                                     '--+Basic+case+--%0A'
    5     1        INIT_FCALL                                               'var_dump'
          2        INIT_FCALL                                               'sprintf'
          3        SEND_VAL                                                 '%25.2f'
          4        SEND_VAL                                                 -0.001
          5        DO_ICALL                                         $0      
          6        SEND_VAR                                                 $0
          7        DO_ICALL                                                 
    6     8        INIT_FCALL                                               'var_dump'
          9        INIT_FCALL                                               'sprintf'
         10        SEND_VAL                                                 '%25.2f'
         11        SEND_VAL                                                 -0
         12        DO_ICALL                                         $2      
         13        SEND_VAR                                                 $2
         14        DO_ICALL                                                 
    9    15        ECHO                                                     '--+Precisions+rounding+to+zero+--%0A'
   10    16        INIT_FCALL                                               'var_dump'
         17        INIT_FCALL                                               'sprintf'
         18        SEND_VAL                                                 '%25.0f'
         19        SEND_VAL                                                 -0.1
         20        DO_ICALL                                         $4      
         21        SEND_VAR                                                 $4
         22        DO_ICALL                                                 
   11    23        INIT_FCALL                                               'var_dump'
         24        INIT_FCALL                                               'sprintf'
         25        SEND_VAL                                                 '%25.0f'
         26        SEND_VAL                                                 -0
         27        DO_ICALL                                         $6      
         28        SEND_VAR                                                 $6
         29        DO_ICALL                                                 
   12    30        INIT_FCALL                                               'var_dump'
         31        INIT_FCALL                                               'sprintf'
         32        SEND_VAL                                                 '%25.1f'
         33        SEND_VAL                                                 -0.04
         34        DO_ICALL                                         $8      
         35        SEND_VAR                                                 $8
         36        DO_ICALL                                                 
   13    37        INIT_FCALL                                               'var_dump'
         38        INIT_FCALL                                               'sprintf'
         39        SEND_VAL                                                 '%25.1f'
         40        SEND_VAL                                                 -0.001
         41        DO_ICALL                                         $10     
         42        SEND_VAR                                                 $10
         43        DO_ICALL                                                 
   14    44        INIT_FCALL                                               'var_dump'
         45        INIT_FCALL                                               'sprintf'
         46        SEND_VAL                                                 '%25.2f'
         47        SEND_VAL                                                 -0.004
         48        DO_ICALL                                         $12     
         49        SEND_VAR                                                 $12
         50        DO_ICALL                                                 
   15    51        INIT_FCALL                                               'var_dump'
         52        INIT_FCALL                                               'sprintf'
         53        SEND_VAL                                                 '%25.2f'
         54        SEND_VAL                                                 -0.001
         55        DO_ICALL                                         $14     
         56        SEND_VAR                                                 $14
         57        DO_ICALL                                                 
   16    58        INIT_FCALL                                               'var_dump'
         59        INIT_FCALL                                               'sprintf'
         60        SEND_VAL                                                 '%25.3f'
         61        SEND_VAL                                                 -0.0004
         62        DO_ICALL                                         $16     
         63        SEND_VAR                                                 $16
         64        DO_ICALL                                                 
   17    65        INIT_FCALL                                               'var_dump'
         66        INIT_FCALL                                               'sprintf'
         67        SEND_VAL                                                 '%25.3f'
         68        SEND_VAL                                                 -0.0001
         69        DO_ICALL                                         $18     
         70        SEND_VAR                                                 $18
         71        DO_ICALL                                                 
   18    72        INIT_FCALL                                               'var_dump'
         73        INIT_FCALL                                               'sprintf'
         74        SEND_VAL                                                 '%25.4f'
         75        SEND_VAL                                                 -4.0e-5
         76        DO_ICALL                                         $20     
         77        SEND_VAR                                                 $20
         78        DO_ICALL                                                 
   19    79        INIT_FCALL                                               'var_dump'
         80        INIT_FCALL                                               'sprintf'
         81        SEND_VAL                                                 '%25.4f'
         82        SEND_VAL                                                 -1.0e-5
         83        DO_ICALL                                         $22     
         84        SEND_VAR                                                 $22
         85        DO_ICALL                                                 
   22    86        ECHO                                                     '--+Should+stay+negative+--%0A'
   23    87        INIT_FCALL                                               'var_dump'
         88        INIT_FCALL                                               'sprintf'
         89        SEND_VAL                                                 '%25.2f'
         90        SEND_VAL                                                 -0.01
         91        DO_ICALL                                         $24     
         92        SEND_VAR                                                 $24
         93        DO_ICALL                                                 
   24    94        INIT_FCALL                                               'var_dump'
         95        INIT_FCALL                                               'sprintf'
         96        SEND_VAL                                                 '%25.2f'
         97        SEND_VAL                                                 -0.1
         98        DO_ICALL                                         $26     
         99        SEND_VAR                                                 $26
        100        DO_ICALL                                                 
   25   101        INIT_FCALL                                               'var_dump'
        102        INIT_FCALL                                               'sprintf'
        103        SEND_VAL                                                 '%25.2f'
        104        SEND_VAL                                                 -1.5
        105        DO_ICALL                                         $28     
        106        SEND_VAR                                                 $28
        107        DO_ICALL                                                 
   26   108        INIT_FCALL                                               'var_dump'
        109        INIT_FCALL                                               'sprintf'
        110        SEND_VAL                                                 '%25.1f'
        111        SEND_VAL                                                 -0.1
        112        DO_ICALL                                         $30     
        113        SEND_VAR                                                 $30
        114        DO_ICALL                                                 
   27   115        INIT_FCALL                                               'var_dump'
        116        INIT_FCALL                                               'sprintf'
        117        SEND_VAL                                                 '%25.0f'
        118        SEND_VAL                                                 -1
        119        DO_ICALL                                         $32     
        120        SEND_VAR                                                 $32
        121        DO_ICALL                                                 
   30   122        ECHO                                                     '--+Uppercase+F+--%0A'
   31   123        INIT_FCALL                                               'var_dump'
        124        INIT_FCALL                                               'sprintf'
        125        SEND_VAL                                                 '%25.2F'
        126        SEND_VAL                                                 -0.001
        127        DO_ICALL                                         $34     
        128        SEND_VAR                                                 $34
        129        DO_ICALL                                                 
   32   130        INIT_FCALL                                               'var_dump'
        131        INIT_FCALL                                               'sprintf'
        132        SEND_VAL                                                 '%25.2F'
        133        SEND_VAL                                                 -0.01
        134        DO_ICALL                                         $36     
        135        SEND_VAR                                                 $36
        136        DO_ICALL                                                 
   35   137        ECHO                                                     '--+Explicit+sign+--%0A'
   36   138        INIT_FCALL                                               'var_dump'
        139        INIT_FCALL                                               'sprintf'
        140        SEND_VAL                                                 '%25%2B.2f'
        141        SEND_VAL                                                 -0.001
        142        DO_ICALL                                         $38     
        143        SEND_VAR                                                 $38
        144        DO_ICALL                                                 
   37   145        INIT_FCALL                                               'var_dump'
        146        INIT_FCALL                                               'sprintf'
        147        SEND_VAL                                                 '%25%2B.2f'
        148        SEND_VAL                                                 0.001
        149        DO_ICALL                                         $40     
        150        SEND_VAR                                                 $40
        151        DO_ICALL                                                 
   38   152        INIT_FCALL                                               'var_dump'
        153        INIT_FCALL                                               'sprintf'
        154        SEND_VAL                                                 '%25%2B.2f'
        155        SEND_VAL                                                 -0.01
        156        DO_ICALL                                         $42     
        157        SEND_VAR                                                 $42
        158        DO_ICALL                                                 
   41   159        ECHO                                                     '--+printf+--%0A'
   42   160        INIT_FCALL                                               'printf'
        161        SEND_VAL                                                 '%25.2f'
        162        SEND_VAL                                                 -0.001
        163        DO_ICALL                                                 
   43   164        ECHO                                                     '%0A'
   44   165        INIT_FCALL                                               'printf'
        166        SEND_VAL                                                 '%25.2f'
        167        SEND_VAL                                                 -0.01
        168        DO_ICALL                                                 
   45   169        ECHO                                                     '%0A'
   48   170        ECHO                                                     '--+number_format+consistency+--%0A'
   49   171        INIT_FCALL                                               'var_dump'
        172        INIT_FCALL                                               'number_format'
        173        SEND_VAL                                                 -0.001
        174        SEND_VAL                                                 2
        175        DO_ICALL                                         $46     
        176        SEND_VAR                                                 $46
        177        DO_ICALL                                                 
   50   178        INIT_FCALL                                               'var_dump'
        179        INIT_FCALL                                               'number_format'
        180        SEND_VAL                                                 -0.01
        181        SEND_VAL                                                 2
        182        DO_ICALL                                         $48     
        183        SEND_VAR                                                 $48
        184        DO_ICALL                                                 
   53   185        ECHO                                                     '--+Very+small+negatives+--%0A'
   54   186        INIT_FCALL                                               'var_dump'
        187        INIT_FCALL                                               'sprintf'
        188        SEND_VAL                                                 '%25.2f'
        189        SEND_VAL                                                 -1.0e-10
        190        DO_ICALL                                         $50     
        191        SEND_VAR                                                 $50
        192        DO_ICALL                                                 
   55   193        INIT_FCALL                                               'var_dump'
        194        INIT_FCALL                                               'sprintf'
        195        SEND_VAL                                                 '%25.2f'
        196        SEND_VAL                                                 -2.22045e-16
        197        DO_ICALL                                         $52     
        198        SEND_VAR                                                 $52
        199        DO_ICALL                                                 
   56   200        INIT_FCALL                                               'var_dump'
        201        INIT_FCALL                                               'sprintf'
        202        SEND_VAL                                                 '%25.2f'
        203        SEND_VAL                                                 -1.0e-100
        204        DO_ICALL                                         $54     
        205        SEND_VAR                                                 $54
        206        DO_ICALL                                                 
   59   207        ECHO                                                     '--+Padding+--%0A'
   60   208        INIT_FCALL                                               'var_dump'
        209        INIT_FCALL                                               'sprintf'
        210        SEND_VAL                                                 '%2508.2f'
        211        SEND_VAL                                                 -0.001
        212        DO_ICALL                                         $56     
        213        SEND_VAR                                                 $56
        214        DO_ICALL                                                 
   61   215        INIT_FCALL                                               'var_dump'
        216        INIT_FCALL                                               'sprintf'
        217        SEND_VAL                                                 '%2508.2f'
        218        SEND_VAL                                                 -0.01
        219        DO_ICALL                                         $58     
        220        SEND_VAR                                                 $58
        221        DO_ICALL                                                 
        222      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
151.05 ms | 1036 KiB | 17 Q