$a = 16.4 *100;
echo $a;
echo "
";
echo intval($a);
echo "
";
Can anyone give me some advice?
$a = 16.4 *100;
echo $a;
echo "
";
echo intval($a);
echo "
";
Can anyone give me some advice?
Similar questions from SF
Brother Bird’s explanation of PHP int and float
16.4 is 16.399999 inside the machine......
16.399999*100 = 16.399999. intval directly removes the mantissa
<code class="php">echo " ";</code>
Shocked me
<code class="php">$a = 16.4 *100; echo $a.PHP_EOL; echo intval($a).PHP_EOL;//用PHP_EOL不是挺好</code>
Actually, I think this is a bug in PHP, but it will be over with a little attention.
PHP’s integer processing includes rounding, rounding down, and rounding up. As @lettermu has explained before, there is no 16.4 in binary and can only be approximated, so 16.4*100 is not 1640, but 1639.9999999999999999999999. I don’t know what the specific processing is done internally, but through a simple test, it can be found that PHP rounds down instead of rounding when converting to integer.
<code>$a = 16.4 * 100; //其实很多小数都有类似问题,也不限于PHP echo (string) $a . "\n"; echo (int) $a . "\n"; echo floor($a) . "\n"; echo ceil($a) . "\n"; echo (int)(string) $a . "\n";</code>
Intval function problem. You can convert strval first and then convert it to int
<code>echo intval(strval(16.4 *100)); // 1640</code>
That’s right. Your way of wrapping lines makes my eyes light up. It feels like opening the door to a new world 23333