-1
# PHP Version 5.2.9  

$a = 0.6/0.1;  
$b = $a % 5;  
print "\$a=$a; \$b=$b\n";  
# result:  
# $a=6; $b=0   # One should expect $b = 1  

$a = 0.6/0.1;  
$a = round($a);  
$b = $a % 5;  
print "\$a=$a; \$b=$b\n";  
# result:  
# $a=6; $b=1  # result as expected  

为什么在第一种情况下结果 $b=0 。
为什么 round() 函数似乎解决了这个问题?

4

1 回答 1

3

用一堆小数位打印两个数字,你会看到问题,这是由于浮点不精确造成的:

第一个$a

5.999999999999999111821580299874767661 

第二个,之后round()

6.000000000000000000000000000000000000

将第一个转换为int(就像 mod 运算符在计算其值时所做的那样)结果为5,而第二个结果为6.

于 2012-12-17T15:33:53.827 回答