-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 

2 番目のround():

6.000000000000000000000000000000000000

最初のキャストint(mod 演算子がその値を計算するときに行うように) の結果は5になり、2 番目の結果は になり6ます。

于 2012-12-17T15:33:53.827 に答える