为什么65.6 * 100%10等于9,而不是PHP中的0?

时间:2012-11-12 07:26:41

标签: php math

echo 65.7 * 100 % 10 // 0

echo 65.6 * 100 % 10 // 9 <---

echo 6560 % 10       // 0

echo 65.5 * 100 % 10 // 0

有人可以解释一下原因吗?

修改

对于人类或非程序员来说,结果9显然是错误的。

如何在编程时阻止此"error"

4 个答案:

答案 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解释了原因。