3v4l.org

run code in 300+ PHP versions simultaneously
<?php function mathematical_zeros_after_dot($float) { $float = abs($float); // remove any signs $float -= (int)$float; // remove whole numbers from float if ($float == 0) { return "Rendered as 0"; } $max = 20; for ($x = 0; $x < $max; ++$x) { $float *= 10; if ($float >= 1) { return $x; } } return "$max {exceeded}"; } $floats = [ 25.000000000022, // 10 0.0000062, // 5 0.020320, // 1 .505000, // 0 0, // 0 .000507, // 3 -.002009, // 2 1000, // 0 0.00, // 0 1 // 0 -1.0000000000004000004, // 12 981.0000000000000000000004000004 // 21 ]; foreach ($floats as $float) { echo "(Math) {$float} has " , mathematical_zeros_after_dot($float) , " zero(s)\n"; echo "Barmar {$float} has " , strspn($float, "0", strpos($float, ".")+1) , " zero(s)\n"; echo "(PMA) {$float} has " , preg_match_all('~(?:\.|\G(?!^))0~', $float) , " zero(s)\n"; echo "(PA) {$float} has " , (preg_match('~\.\K0+~', $float, $match) ? strlen($match[0]) : 0) , " zero(s)\n"; }
Output for 7.1.0 - 7.1.33, 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.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.7
(Math) 25.000000000022 has 10 zero(s) Barmar 25.000000000022 has 10 zero(s) (PMA) 25.000000000022 has 10 zero(s) (PA) 25.000000000022 has 10 zero(s) (Math) 6.2E-6 has 5 zero(s) Barmar 6.2E-6 has 0 zero(s) (PMA) 6.2E-6 has 0 zero(s) (PA) 6.2E-6 has 0 zero(s) (Math) 0.02032 has 1 zero(s) Barmar 0.02032 has 1 zero(s) (PMA) 0.02032 has 1 zero(s) (PA) 0.02032 has 1 zero(s) (Math) 0.505 has 0 zero(s) Barmar 0.505 has 0 zero(s) (PMA) 0.505 has 0 zero(s) (PA) 0.505 has 0 zero(s) (Math) 0 has Rendered as 0 zero(s) Barmar 0 has 0 zero(s) (PMA) 0 has 0 zero(s) (PA) 0 has 0 zero(s) (Math) 0.000507 has 3 zero(s) Barmar 0.000507 has 3 zero(s) (PMA) 0.000507 has 3 zero(s) (PA) 0.000507 has 3 zero(s) (Math) -0.002009 has 2 zero(s) Barmar -0.002009 has 2 zero(s) (PMA) -0.002009 has 2 zero(s) (PA) -0.002009 has 2 zero(s) (Math) 1000 has Rendered as 0 zero(s) Barmar 1000 has 3 zero(s) (PMA) 1000 has 0 zero(s) (PA) 1000 has 0 zero(s) (Math) 0 has Rendered as 0 zero(s) Barmar 0 has 0 zero(s) (PMA) 0 has 0 zero(s) (PA) 0 has 0 zero(s) (Math) -3.9990233346998E-13 has 12 zero(s) Barmar -3.9990233346998E-13 has 0 zero(s) (PMA) -3.9990233346998E-13 has 0 zero(s) (PA) -3.9990233346998E-13 has 0 zero(s) (Math) 981 has Rendered as 0 zero(s) Barmar 981 has 0 zero(s) (PMA) 981 has 0 zero(s) (PA) 981 has 0 zero(s)

preferences:
174.27 ms | 406 KiB | 226 Q