次のサンプル コードのように、PHP で 2 つの float を比較します。
$a = 0.17;
$b = 1 - 0.83; //0.17
if($a == $b ){
echo 'a and b are same';
}
else {
echo 'a and b are not same';
}
このコードでは、 とが同じであるにもかかわらず、条件else
ではなく条件の結果が返されます。PHP で浮動小数点数を処理/比較する特別な方法はありますか?if
$a
$b
もしそうなら、この問題の解決にご協力ください。
それともサーバーの設定に問題があるのでしょうか?
ベストアンサー1
このようにするとすべき同じである。しかし、浮動小数点値の特性として、思われる同じ値になるものは、実際に同一である必要はありません。したがって、$a
がリテラルであり.17
、$b
計算によってそこに到達する場合、両方とも同じ値を表示していても、異なる可能性があります。
通常、このように浮動小数点値の等価性を比較することはないので、許容可能な最小の差を使用する必要があります。
if (abs(($a-$b)/$b) < 0.00001) {
echo "same";
}
そんな感じ。