0

PHP の整数と浮動小数点数に問題があります:/
私のコード:

$dif =floatval($sum)-floatval($this->row_array[$row][$col]);  
echo $dif; 

$sum100
$this->row_array[$row][$col]は 100.00
ですが、$dif-1.4210854715202E-14 です!
なぜ$dif0 でないのか分かりますか?

4

1 に答える 1

0

浮動小数点数は、10 進数のバイナリ近似として表されます (格納方法の詳細な説明については、このウィキペディアのリンクを参照してください)。あなたの例でわかるように、それらは「合理的に近い」ですが、上記の10進数の正確な表現ではありません。したがって、それを整数 (含まれる数値の正確な表現) と比較すると、ご覧のように小さな違いが得られます。

浮動小数点数を比較するには、通常、比較に「許容範囲」を追加するのが正しい手法です。2 つの数値を正確に比較するのではなく、一方が他方の小さな間隔内にあるかどうかを確認します。間隔の小ささは、数値がどれだけ大きいか小さいかによって異なります。

于 2013-07-01T17:40:56.860 に答える