PHP の整数と浮動小数点数に問題があります:/
私のコード:
$dif =floatval($sum)-floatval($this->row_array[$row][$col]);
echo $dif;
$sum
100
$this->row_array[$row][$col]
は 100.00
ですが、$dif
-1.4210854715202E-14 です!
なぜ$dif
0 でないのか分かりますか?
浮動小数点数は、10 進数のバイナリ近似として表されます (格納方法の詳細な説明については、このウィキペディアのリンクを参照してください)。あなたの例でわかるように、それらは「合理的に近い」ですが、上記の10進数の正確な表現ではありません。したがって、それを整数 (含まれる数値の正確な表現) と比較すると、ご覧のように小さな違いが得られます。
浮動小数点数を比較するには、通常、比較に「許容範囲」を追加するのが正しい手法です。2 つの数値を正確に比較するのではなく、一方が他方の小さな間隔内にあるかどうかを確認します。間隔の小ささは、数値がどれだけ大きいか小さいかによって異なります。