3v4l.org

run code in 300+ PHP versions simultaneously
<?php function mickmackusa($number, $decimals = 2, $dec_point = ',', $thousands_sep = ' ') { $number = number_format($number, min(5, $decimals), $dec_point, $thousands_sep); // round to decimal max return preg_replace("~".$dec_point."\d{".min(2, $decimals)."}[^0]*\K0+$~", '', $number); // trim zeros (if any, beyond minimum allowance) from right side of decimal character } function dersy($number, $decimals=2, $dec_point = ',', $thousands_sep = ' ') { $decimals = (int)$decimals; if($decimals > 5) { $decimals = 5; //Maximum decimals limit.. } $number = number_format((float)$number, $decimals, $dec_point, $thousands_sep); if(strpos($number, $dec_point) === false) { return $number; //No decimal values.. } $splArr = explode($dec_point, $number); $split = array_reverse(str_split($splArr[1])); foreach($split as $cleanNum) { if($decimals > 2 && $cleanNum === '0') { //Keep minimum two decimals. $number = substr($number, 0, -1); $decimals--; } else { break; //Found a non zero number. } } return rtrim($number,$dec_point); } $test = [ '1.01', '1.044', '0.240000', '0.200', '0.24540', '0.24546', '6500.00', '3760.54', '3760.000000000', '0.04000', '1.000000', '1.000005' ]; for ($x=0; $x<7; ++$x) { foreach ($test as $number) { $mickmackusa = mickmackusa($number, $x); $dersy = dersy($number, $x); echo "$number & $x -> Assert: $mickmackusa (Expect: $dersy) "; if ($mickmackusa === $dersy) { echo "IDENTICAL\n"; } else { echo "FAILURE\n"; } } }
Output for 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
1.01 & 0 -> Assert: 1 (Expect: 1) IDENTICAL 1.044 & 0 -> Assert: 1 (Expect: 1) IDENTICAL 0.240000 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 0.200 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 0.24540 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 0.24546 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 6500.00 & 0 -> Assert: 6 500 (Expect: 6 500) IDENTICAL 3760.54 & 0 -> Assert: 3 761 (Expect: 3 761) IDENTICAL 3760.000000000 & 0 -> Assert: 3 760 (Expect: 3 760) IDENTICAL 0.04000 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 1.000000 & 0 -> Assert: 1 (Expect: 1) IDENTICAL 1.000005 & 0 -> Assert: 1 (Expect: 1) IDENTICAL 1.01 & 1 -> Assert: 1,0 (Expect: 1,0) IDENTICAL 1.044 & 1 -> Assert: 1,0 (Expect: 1,0) IDENTICAL 0.240000 & 1 -> Assert: 0,2 (Expect: 0,2) IDENTICAL 0.200 & 1 -> Assert: 0,2 (Expect: 0,2) IDENTICAL 0.24540 & 1 -> Assert: 0,2 (Expect: 0,2) IDENTICAL 0.24546 & 1 -> Assert: 0,2 (Expect: 0,2) IDENTICAL 6500.00 & 1 -> Assert: 6 500,0 (Expect: 6 500,0) IDENTICAL 3760.54 & 1 -> Assert: 3 760,5 (Expect: 3 760,5) IDENTICAL 3760.000000000 & 1 -> Assert: 3 760,0 (Expect: 3 760,0) IDENTICAL 0.04000 & 1 -> Assert: 0,0 (Expect: 0,0) IDENTICAL 1.000000 & 1 -> Assert: 1,0 (Expect: 1,0) IDENTICAL 1.000005 & 1 -> Assert: 1,0 (Expect: 1,0) IDENTICAL 1.01 & 2 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 2 -> Assert: 1,04 (Expect: 1,04) IDENTICAL 0.240000 & 2 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 2 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 2 -> Assert: 0,25 (Expect: 0,25) IDENTICAL 0.24546 & 2 -> Assert: 0,25 (Expect: 0,25) IDENTICAL 6500.00 & 2 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 2 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 2 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 2 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 2 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 2 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.01 & 3 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 3 -> Assert: 1,044 (Expect: 1,044) IDENTICAL 0.240000 & 3 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 3 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 3 -> Assert: 0,245 (Expect: 0,245) IDENTICAL 0.24546 & 3 -> Assert: 0,245 (Expect: 0,245) IDENTICAL 6500.00 & 3 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 3 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 3 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 3 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 3 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 3 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.01 & 4 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 4 -> Assert: 1,044 (Expect: 1,044) IDENTICAL 0.240000 & 4 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 4 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 4 -> Assert: 0,2454 (Expect: 0,2454) IDENTICAL 0.24546 & 4 -> Assert: 0,2455 (Expect: 0,2455) IDENTICAL 6500.00 & 4 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 4 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 4 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 4 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 4 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 4 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.01 & 5 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 5 -> Assert: 1,044 (Expect: 1,044) IDENTICAL 0.240000 & 5 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 5 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 5 -> Assert: 0,2454 (Expect: 0,2454) IDENTICAL 0.24546 & 5 -> Assert: 0,24546 (Expect: 0,24546) IDENTICAL 6500.00 & 5 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 5 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 5 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 5 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 5 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 5 -> Assert: 1,00001 (Expect: 1,00001) IDENTICAL 1.01 & 6 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 6 -> Assert: 1,044 (Expect: 1,044) IDENTICAL 0.240000 & 6 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 6 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 6 -> Assert: 0,2454 (Expect: 0,2454) IDENTICAL 0.24546 & 6 -> Assert: 0,24546 (Expect: 0,24546) IDENTICAL 6500.00 & 6 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 6 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 6 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 6 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 6 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 6 -> Assert: 1,00001 (Expect: 1,00001) IDENTICAL
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 1.01 & 0 -> Assert: 1 (Expect: 1) IDENTICAL 1.044 & 0 -> Assert: 1 (Expect: 1) IDENTICAL 0.240000 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 0.200 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 0.24540 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 0.24546 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 6500.00 & 0 -> Assert: 6 500 (Expect: 6 500) IDENTICAL 3760.54 & 0 -> Assert: 3 761 (Expect: 3 761) IDENTICAL 3760.000000000 & 0 -> Assert: 3 760 (Expect: 3 760) IDENTICAL 0.04000 & 0 -> Assert: 0 (Expect: 0) IDENTICAL 1.000000 & 0 -> Assert: 1 (Expect: 1) IDENTICAL 1.000005 & 0 -> Assert: 1 (Expect: 1) IDENTICAL 1.01 & 1 -> Assert: 1,0 (Expect: 1,0) IDENTICAL 1.044 & 1 -> Assert: 1,0 (Expect: 1,0) IDENTICAL 0.240000 & 1 -> Assert: 0,2 (Expect: 0,2) IDENTICAL 0.200 & 1 -> Assert: 0,2 (Expect: 0,2) IDENTICAL 0.24540 & 1 -> Assert: 0,2 (Expect: 0,2) IDENTICAL 0.24546 & 1 -> Assert: 0,2 (Expect: 0,2) IDENTICAL 6500.00 & 1 -> Assert: 6 500,0 (Expect: 6 500,0) IDENTICAL 3760.54 & 1 -> Assert: 3 760,5 (Expect: 3 760,5) IDENTICAL 3760.000000000 & 1 -> Assert: 3 760,0 (Expect: 3 760,0) IDENTICAL 0.04000 & 1 -> Assert: 0,0 (Expect: 0,0) IDENTICAL 1.000000 & 1 -> Assert: 1,0 (Expect: 1,0) IDENTICAL 1.000005 & 1 -> Assert: 1,0 (Expect: 1,0) IDENTICAL 1.01 & 2 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 2 -> Assert: 1,04 (Expect: 1,04) IDENTICAL 0.240000 & 2 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 2 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 2 -> Assert: 0,25 (Expect: 0,25) IDENTICAL 0.24546 & 2 -> Assert: 0,25 (Expect: 0,25) IDENTICAL 6500.00 & 2 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 2 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 2 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 2 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 2 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 2 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.01 & 3 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 3 -> Assert: 1,044 (Expect: 1,044) IDENTICAL 0.240000 & 3 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 3 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 3 -> Assert: 0,245 (Expect: 0,245) IDENTICAL 0.24546 & 3 -> Assert: 0,245 (Expect: 0,245) IDENTICAL 6500.00 & 3 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 3 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 3 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 3 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 3 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 3 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.01 & 4 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 4 -> Assert: 1,044 (Expect: 1,044) IDENTICAL 0.240000 & 4 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 4 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 4 -> Assert: 0,2454 (Expect: 0,2454) IDENTICAL 0.24546 & 4 -> Assert: 0,2455 (Expect: 0,2455) IDENTICAL 6500.00 & 4 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 4 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 4 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 4 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 4 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 4 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.01 & 5 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 5 -> Assert: 1,044 (Expect: 1,044) IDENTICAL 0.240000 & 5 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 5 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 5 -> Assert: 0,2454 (Expect: 0,2454) IDENTICAL 0.24546 & 5 -> Assert: 0,24546 (Expect: 0,24546) IDENTICAL 6500.00 & 5 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 5 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 5 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 5 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 5 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 5 -> Assert: 1,00001 (Expect: 1,00001) IDENTICAL 1.01 & 6 -> Assert: 1,01 (Expect: 1,01) IDENTICAL 1.044 & 6 -> Assert: 1,044 (Expect: 1,044) IDENTICAL 0.240000 & 6 -> Assert: 0,24 (Expect: 0,24) IDENTICAL 0.200 & 6 -> Assert: 0,20 (Expect: 0,20) IDENTICAL 0.24540 & 6 -> Assert: 0,2454 (Expect: 0,2454) IDENTICAL 0.24546 & 6 -> Assert: 0,24546 (Expect: 0,24546) IDENTICAL 6500.00 & 6 -> Assert: 6 500,00 (Expect: 6 500,00) IDENTICAL 3760.54 & 6 -> Assert: 3 760,54 (Expect: 3 760,54) IDENTICAL 3760.000000000 & 6 -> Assert: 3 760,00 (Expect: 3 760,00) IDENTICAL 0.04000 & 6 -> Assert: 0,04 (Expect: 0,04) IDENTICAL 1.000000 & 6 -> Assert: 1,00 (Expect: 1,00) IDENTICAL 1.000005 & 6 -> Assert: 1,00001 (Expect: 1,00001) IDENTICAL

preferences:
291.1 ms | 413 KiB | 288 Q