echo 65.7 * 100 % 10 // 0 echo 65.6 * 100 % 10 // 9 <--- echo 6560 % 10 // 0 echo 65.5 * 100 % 10 // 0
有人可以解释为什么吗?为什么65.6 * 100%10等于9,而不是PHP中的0?
编辑:
人类或非程序员,结果9 apprently错误。
编程时如何防止这个"error"
?
echo 65.7 * 100 % 10 // 0 echo 65.6 * 100 % 10 // 9 <--- echo 6560 % 10 // 0 echo 65.5 * 100 % 10 // 0
有人可以解释为什么吗?为什么65.6 * 100%10等于9,而不是PHP中的0?
编辑:
人类或非程序员,结果9 apprently错误。
编程时如何防止这个"error"
?
因为65.6
在浮点数实际上是近似值65.6
。它实际上少于65.6
,即65.5999
或类似的。
假设我的胡乱猜测的实际值是正确的,你有6559.9
,其中由模运算符,然后通过10余9.
因为65.6 * 100是6559.9999999999划分为stripped to 6599
。
这就是floating points给你。
因为:
<?php
echo (65.7 * 100 == 6570) ? "Equal" : "Not equal"; // Equal
echo (65.6 * 100 == 6560) ? "Equal" : "Not equal"; // NOT EQUAL !!
echo (65.5 * 100 == 6550) ? "Equal" : "Not equal"; // Equal
?>
65.6 * 100是不 6560的big red warning box here解释了为什么。
如前所述,这与浮点运算有关。我建议阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。
那么我如何才能在php中获得实际的6559.9999999999? – user1643156
您无法在二进制浮点系统中获取所有小数。其中一些(如65.6)无法表示。 – Thilo