PHPの浮動小数点演算に関連する問題

PHPと丸め浮動小数点計算と比較不正確。例えば:
の$ A = 0.2 + 0.7。
$ B = 0.9;
var_dump($ ==ます$ B); //結果が出力ブール値(偽)
公式PHPマニュアルは説明:0.2のような明らかに単純な小数の精度のほとんどを失うことなく内部バイナリフォーマットに変換することができません。 
 printf( "%の0.20f"、$ a)は; //結果を出力する0.89999999999999991118
 printf( "%の0.20f"、$ bの); //結果が出力され0.90000000000000002220
結果は、浮動小数点データとしての精度は完全に正確でない部分を失ったことを示しています。だから、最後の桁に浮動数の結果を信用したことがない、と平等のための浮動小数点数を比較することはありません。
PHPの問題ではありませんが、浮動小数点の内部処理コンピュータの問題が!C、JAVAや他の言語で同じ問題に遭遇することに留意すべきです。
ソリューション:それは私たちが再比較する必要があり、精度の範囲内に制御する必要があります。
したがって、浮動小数点精度変換と(文字列)を追加する()関数を使用してbcadd。
var_dump(bcadd(0.2,0.7,1)== 0.9); //結果を出力するBOOL(真)
使用はまた、()関数は、指定された精度に丸められ円形であってもよいです。
var_dump(ラウンド(0.2 + 0.7,2)== 0.9); //結果を出力するBOOL(真)
 
 

おすすめ

転載: www.cnblogs.com/rxbook/p/11402224.html