我观察了以下内容并感谢您的解释。
$amount = 4.56;
echo ($amount * 100) % 5;
输出:0
然而,
$amount = 456;
echo $amount % 5;
输出:1
我在两个单独的PHP安装上尝试了这个代码,结果相同。谢谢你的帮助!
答案 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
来避免此问题。