以下のテストケースを参照してください:?あなたが最後のif/elseブロックはまた、右、真示すだろうと思うだろうfloatval()から得られたこの値は、別の数値と比較したときにfalseに評価されるのはなぜですか?
$val = floatval("336.00");
$result = 300*1.12;
header("content-type: text/plain");
echo "\$result = 300*1.12 which equals $result\n";
echo "\$val = floatval(\"336.00\") which equals $val\n";
echo "gettype(\$val) = ".gettype($val)."\n";
echo "gettype(\$result) = ".gettype($result)."\n";
echo "gettype(300*1.12) = ".gettype(300*1.12)."\n";
echo "gettype(floatval(\$result)) = ".gettype(floatval($result))."\n";
if ($result == 300*1.12)
echo "\$result == 300*1.12 is true\n";
else
echo "\$result == 300*1.12 is false\n";
if ($result == $val)
echo "(\$result == \$val) \$result == 300*1.12 is true\n";
else
echo "(\$result == \$val) \$result == 300*1.12 is false\n";
をそうではありません!同じスクリプトの出力を参照してください:
$result = 300*1.12 which equals 336
$val = floatval("336.00") which equals 336
gettype($val) = double
gettype($result) = double
gettype(300*1.12) = double
gettype(floatval($result)) = double
$result == 300*1.12 is true
($result == $val) $result == 300*1.12 is false
私はここで何が欠けていますか? PHP 5のさまざまなバージョンで試してみましたが、すべて同じ出力を生成します。
浮動小数点比較の問題。 – BoltClock
[phpの浮動小数点数を比較]の可能な複製(http://stackoverflow.com/questions/3148937/compare-floats-in-php) – Jon
http://stackoverflow.com/search?q=floating+point+inaccuracy+ [ php] – paxdiablo