奇怪的模数结果

时间:2011-03-09 16:38:39

标签: php modulo

我观察了以下内容并感谢您的解释。

$amount = 4.56;
echo ($amount * 100) % 5;

输出:0

然而,

$amount = 456;  
echo $amount % 5;

输出:1

我在两个单独的PHP安装上尝试了这个代码,结果相同。谢谢你的帮助!

2 个答案:

答案 0 :(得分:6)

强烈怀疑这是因为4.56无法准确表示为二进制浮点数,因此使用非常接近它的值。当乘以100时,达到455.999(某物),然后模运算符在执行操作之前截断为455。

我不知道PHP浮点数的确切细节,但最接近的IEEE-754加倍到4.56是4.55999999999999960920149533194489777088165283203125。

所以这里有一些尝试:

$amount = 455.999999999;
echo $amount % 5;

我强烈怀疑它也会打印0。来自some PHP arithmetic documentation

  

在处理之前,模数的操作数被转换为整数(通过去除小数部分)。

答案 1 :(得分:0)

使用fmod来避免此问题。