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));
Output for 7.2.0 - 7.2.34, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.18, 8.5.0 - 8.5.3
-- Basic case -- string(5) "-0.00" string(4) "0.00" -- Precisions rounding to zero -- string(2) "-0" string(1) "0" string(4) "-0.0" string(4) "-0.0" string(5) "-0.00" string(5) "-0.00" string(6) "-0.000" string(6) "-0.000" string(7) "-0.0000" string(7) "-0.0000" -- Should stay negative -- string(5) "-0.01" string(5) "-0.10" string(5) "-1.50" string(4) "-0.1" string(2) "-1" -- Uppercase F -- string(5) "-0.00" string(5) "-0.01" -- Explicit sign -- string(5) "-0.00" string(5) "+0.00" string(5) "-0.01" -- printf -- -0.00 -0.01 -- number_format consistency -- string(4) "0.00" string(5) "-0.01" -- Very small negatives -- string(5) "-0.00" string(5) "-0.00" string(5) "-0.00" -- Padding -- string(8) "-0000.00" string(8) "-0000.01"
Output for 7.1.0 - 7.1.33
-- Basic case -- string(5) "-0.00" string(4) "0.00" -- Precisions rounding to zero -- string(2) "-0" string(1) "0" string(4) "-0.0" string(4) "-0.0" string(5) "-0.00" string(5) "-0.00" string(6) "-0.000" string(6) "-0.000" string(7) "-0.0000" string(7) "-0.0000" -- Should stay negative -- string(5) "-0.01" string(5) "-0.10" string(5) "-1.50" string(4) "-0.1" string(2) "-1" -- Uppercase F -- string(5) "-0.00" string(5) "-0.01" -- Explicit sign -- string(5) "-0.00" string(5) "+0.00" string(5) "-0.01" -- printf -- -0.00 -0.01 -- number_format consistency -- string(5) "-0.00" string(5) "-0.01" -- Very small negatives -- string(5) "-0.00" Notice: Use of undefined constant PHP_FLOAT_EPSILON - assumed 'PHP_FLOAT_EPSILON' in /in/B60Lu on line 55 Warning: A non-numeric value encountered in /in/B60Lu on line 55 string(4) "0.00" string(5) "-0.00" -- Padding -- string(8) "-0000.00" string(8) "-0000.01"
Output for 4.3.10 - 4.3.11, 4.4.0 - 4.4.9, 5.0.3 - 5.0.5, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33
-- Basic case -- string(5) "-0.00" string(4) "0.00" -- Precisions rounding to zero -- string(2) "-0" string(1) "0" string(4) "-0.0" string(4) "-0.0" string(5) "-0.00" string(5) "-0.00" string(6) "-0.000" string(6) "-0.000" string(7) "-0.0000" string(7) "-0.0000" -- Should stay negative -- string(5) "-0.01" string(5) "-0.10" string(5) "-1.50" string(4) "-0.1" string(2) "-1" -- Uppercase F -- string(5) "-0.00" string(5) "-0.01" -- Explicit sign -- string(5) "-0.00" string(5) "+0.00" string(5) "-0.01" -- printf -- -0.00 -0.01 -- number_format consistency -- string(5) "-0.00" string(5) "-0.01" -- Very small negatives -- string(5) "-0.00" Notice: Use of undefined constant PHP_FLOAT_EPSILON - assumed 'PHP_FLOAT_EPSILON' in /in/B60Lu on line 55 string(4) "0.00" string(5) "-0.00" -- Padding -- string(8) "-0000.00" string(8) "-0000.01"
Output for 4.3.9, 5.0.1 - 5.0.2
-- Basic case -- string(5) "-0.00" string(4) "0.00" -- Precisions rounding to zero -- string(2) "-0" string(1) "0" string(4) "-0.0" string(4) "-0.0" string(5) "-0.00" string(5) "-0.00" string(6) "-0.000" string(6) "-0.000" string(7) "-0.0000" string(7) "-0.0000" -- Should stay negative -- string(5) "-0.01" string(5) "-0.10" string(5) "-1.50" string(4) "-0.1" string(2) "-1" -- Uppercase F -- string(0) "" string(0) "" -- Explicit sign -- string(5) "-0.00" string(5) "+0.00" string(5) "-0.01" -- printf -- -0.00 -0.01 -- number_format consistency -- string(5) "-0.00" string(5) "-0.01" -- Very small negatives -- string(5) "-0.00" Notice: Use of undefined constant PHP_FLOAT_EPSILON - assumed 'PHP_FLOAT_EPSILON' in /in/B60Lu on line 55 string(4) "0.00" string(5) "-0.00" -- Padding -- string(8) "-0000.00" string(8) "-0000.01"
Output for 4.3.0 - 4.3.1, 4.3.3 - 4.3.8, 5.0.0
-- Basic case -- string(5) "-0.00" string(4) "0.00" -- Precisions rounding to zero -- string(2) "-0" string(1) "0" string(4) "-0.0" string(4) "-0.0" string(5) "-0.00" string(5) "-0.00" string(6) "-0.000" string(6) "-0.000" string(7) "-0.0000" string(7) "-0.0000" -- Should stay negative -- string(5) "-0.01" string(5) "-0.10" string(5) "-1.50" string(4) "-0.1" string(2) "-1" -- Uppercase F -- string(0) "" string(0) "" -- Explicit sign -- string(5) "-0.00" string(5) "+0.00" string(5) "-0.01" -- printf -- -0.00 -0.01 -- number_format consistency -- string(5) "-0.00" string(5) "-0.01" -- Very small negatives -- string(5) "-0.00" Notice: Use of undefined constant PHP_FLOAT_EPSILON - assumed 'PHP_FLOAT_EPSILON' in /in/B60Lu on line 55 string(4) "0.00" string(5) "-0.00" -- Padding -- string(11) "-0000000.00" string(11) "-0000000.01"
Output for 4.3.2
-- Basic case -- string(5) "-0.00" string(4) "0.00" -- Precisions rounding to zero -- string(2) "-0" string(1) "0" string(4) "-0.0" string(4) "-0.0" string(5) "-0.00" string(5) "-0.00" string(6) "-0.000" string(6) "-0.000" string(7) "-0.0000" string(7) "-0.0000" -- Should stay negative -- string(5) "-0.01" string(5) "-0.10" string(5) "-1.50" string(4) "-0.1" string(2) "-1" -- Uppercase F -- string(0) "" string(0) "" -- Explicit sign -- string(5) "-0.00" string(5) "+0.00" string(5) "-0.01" -- printf -- -0.00 -0.01 -- number_format consistency -- string(5) "-0.00" string(5) "-0.01" -- Very small negatives -- string(5) "-0.00" Notice: Use of undefined constant PHP_FLOAT_EPSILON - assumed 'PHP_FLOAT_EPSILON' in /in/B60Lu on line 55 string(4) "0.00" string(5) "-0.00" -- Padding -- string(12) "-0000000.00" string(12) "-0000000.01"

preferences:
93.08 ms | 418 KiB | 5 Q