php 算术错误 - 取模

php arithmetic errors - modulo

我正在使用 PHP 5.5 (5.5.28) PHP 算术

我遇到了一个非常奇怪的问题
$value=29; $divisor=10;
$mod=$value%$divisor;
echo "$mod<br>";

returns 9(符合预期)

$value=(0.29*100); $divisor=(0.1*100);
$mod=$value%$divisor;
echo "$mod<br>";

returns 8 (????)

我在文档中找不到任何相关信息 显然,编写替换函数并使用它相对容易 但是,问题似乎更大,因为我遇到了奇怪的舍入错误,这意味着我正在处理的项目中的分类帐条目没有平衡

有什么建议吗?

这几乎肯定与浮点数的存储方式有关,您会遇到 .29*100 不完全等于 29 和 0.1*100 不完全等于 10 的问题。因此,如果一个比您预期的稍小或稍大,那么您得到的结果会差 1。如果你打印出小数点后 10 位的中间值,你可能能够观察到原因

这与您在尝试比较浮点数是否相等时遇到的问题完全相同,您最终不得不做类似的事情:if(fabs(a-b) < 0.0001) 而不是说:if(a==b)