PHP の浮動小数点精度に関する警告
これは、PHP ドキュメントに示されているプロンプトです:
0.1 や 0.7 のような単純な 10 進数は、精度を少し損なうことなく内部バイナリ形式に変換できません。
floor(( 0.1 + 0.7 ) * 10) ? 8 の代わりに 7 を返します。
(int)(( 0.1 + 0.7 ) * 10) ?8 の代わりに 7 を返します。?
この現象の説明は、「結果の内部表現が実際には
7.9 に似ているため」です。
?結論は次のとおりです:
したがって、浮動小数点数の結果が最後の桁まで正確であるとは絶対に信じないでください。また、2 つの浮動小数点数が等しいかどうかを比較することも決してしないでください。
未知の小数部分を Int にキャストしないでください。
?(int)round( 0.1 + 0.7 ) * 10) これは安全だと思われます。
多数の乗算と除算がある場合、または中間値が浮動小数点型である場合でも、数値の精度を高めるために BC 数学関数が使用されます。
?