Php 奇异模结果
我观察到以下情况,并感谢您的解释Php 奇异模结果,php,modulo,Php,Modulo,我观察到以下情况,并感谢您的解释 $amount = 4.56; echo ($amount * 100) % 5; 产出:0 但是, $amount = 456; echo $amount % 5; 产出:1 我在两个单独的PHP安装上尝试了这段代码,得到了相同的结果。谢谢你的帮助 我强烈怀疑这是因为4.56不能准确地表示为二进制浮点数,所以使用了非常接近它的值。当乘以100时,等于455.999something,然后在执行该操作之前,模运算器将截断为455 我不知道PHP浮点数的确
$amount = 4.56;
echo ($amount * 100) % 5;
产出:0
但是,
$amount = 456;
echo $amount % 5;
产出:1
我在两个单独的PHP安装上尝试了这段代码,得到了相同的结果。谢谢你的帮助 我强烈怀疑这是因为4.56不能准确地表示为二进制浮点数,所以使用了非常接近它的值。当乘以100时,等于455.999something,然后在执行该操作之前,模运算器将截断为455
我不知道PHP浮点数的确切细节,但最接近4.56的IEEE-754 double是4.5599999999960920149533194489777088165283203125
因此,这里有一些东西可以尝试:
$amount = 455.999999999;
echo $amount % 5;
我强烈怀疑它也会打印0。发件人:
模数的操作数在处理前通过去除小数部分转换为整数
我强烈怀疑这是因为4.56不能准确地表示为二进制浮点数,所以使用了一个非常接近它的值。当乘以100时,等于455.999something,然后在执行该操作之前,模运算器将截断为455
我不知道PHP浮点数的确切细节,但最接近4.56的IEEE-754 double是4.5599999999960920149533194489777088165283203125
因此,这里有一些东西可以尝试:
$amount = 455.999999999;
echo $amount % 5;
我强烈怀疑它也会打印0。发件人:
模数的操作数在处理前通过去除小数部分转换为整数
使用fmod可避免此问题。使用fmod可避免此问题。模运算符对双倍运算有效吗?模运算符对双倍运算有效吗?谢谢您的详细回答!我尝试了你的代码,你是对的,它打印了0。谢谢你的文档部分,很高兴知道!谢谢你详细的回答!我尝试了你的代码,你是对的,它打印了0。谢谢你的文档部分,很高兴知道!