php算术错误 - 模数

时间:2016-09-12 07:11:34

标签: php math modulo

我使用的是PHP 5.5(5.5.28) 我遇到了一个非常奇怪的PHP算法问题

$value=29; $divisor=10;
$mod=$value%$divisor;
echo "$mod<br>";

返回9(如预期的那样)

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

返回8(????)

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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这几乎肯定与存储浮点数的方式有关,并且你遇到的问题是.29 * 100不完全等于29而0.1 * 100并不完全等于10.因此,如果有一个是比你想象的更小或更大,你会得到一个结果。如果以小数点后10位打印中间值,您可能会看到原因

这与您在尝试比较浮点数的相等性时遇到的问题完全相同,您最终必须执行以下操作:if(fabs(ab)&lt; 0.0001)而不是说:if(a == b)< / p>