奇怪的模数结果

skn*_*try 1 php modulo

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

$amount = 4.56;
echo ($amount * 100) % 5;
Run Code Online (Sandbox Code Playgroud)

输出:0

然而,

$amount = 456;  
echo $amount % 5;
Run Code Online (Sandbox Code Playgroud)

输出:1

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

Jon*_*eet 6

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

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

所以这里有一些尝试:

$amount = 455.999999999;
echo $amount % 5;
Run Code Online (Sandbox Code Playgroud)

我强烈怀疑它也会打印0.从一些PHP算术文档:

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