我观察了以下内容,并感谢您的解释.
$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安装上尝试了这个代码,结果相同.谢谢你的帮助!
我强烈怀疑这是因为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算术文档:
在处理之前,模数的操作数被转换为整数(通过去除小数部分).