echo 65.7 * 100 % 10 // 0 echo 65.6 * 100 % 10 // 9 <--- echo 6560 % 10 // 0 echo 65.5 * 100 % 10 // 0
有人可以解释一下原因吗?
修改
对于人类或非程序员来说,结果9显然是错误的。
如何在编程时阻止此"error"
?
答案 0 :(得分:4)
因为浮点中的65.6
实际上是65.6
的近似值。它实际上略小于65.6
,即65.5999
或类似。
假设我对实际值的猜测是正确的,你有6559.9
,模数运算符为stripped to 6599
,其余为9除以10。
答案 1 :(得分:3)
因为65.6 * 100是6559.9999999999。
那是你floating points。
答案 2 :(得分:2)
如前所述,这与浮点运算有关。我建议阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。
答案 3 :(得分:1)
由于:
<?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解释了原因。