Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 奇异模结果_Php_Modulo - Fatal编程技术网

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。谢谢你的文档部分,很高兴知道!