我使用的是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(????)
我在文档中找不到任何相关内容 显然它比较容易编写替换函数并使用它 然而,问题似乎更大,因为我得到了奇怪的舍入错误,这意味着我正在处理的项目中的分类帐条目不平衡
有什么建议吗?
答案 0 :(得分:2)
这几乎肯定与存储浮点数的方式有关,并且你遇到的问题是.29 * 100不完全等于29而0.1 * 100并不完全等于10.因此,如果有一个是比你想象的更小或更大,你会得到一个结果。如果以小数点后10位打印中间值,您可能会看到原因
这与您在尝试比较浮点数的相等性时遇到的问题完全相同,您最终必须执行以下操作:if(fabs(ab)&lt; 0.0001)而不是说:if(a == b)< / p>