<?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";
}
preferences:
24.3 ms | 408 KiB | 5 Q