回声 65.7 * 100 % 10 // 0 回声 65.6 * 100 % 10 // 9 <--- 回声 6560 % 10 // 0 回声 65.5 * 100 % 10 // 0
有人可以解释为什么吗?
编辑:
对于人类或非程序员,结果 9 显然是错误的。
"error"
编程时如何防止这种情况?
因为65.6
浮点数实际上是 的近似值65.6
。它实际上略小于65.6
,即65.5999
或类似。
假设我对实际值的疯狂猜测是正确的,你有6559.9
,它被模运算符剥离6599
,然后除以 10 得到余数 9。
因为 65.6 * 100 是 6559.9999999999。
这对你来说是浮点数。
如前所述,这与浮点运算有关。我推荐阅读每个计算机科学家应该知道的关于浮点运算的知识。
因为:
<?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。这里的大红色警告框解释了原因。