[PHP-users 30826] Re: floor 関数の切捨て処理について

"[ACT]山口" tyamaguchi @ system-act.com
2006年 11月 29日 (水) 12:44:07 JST


System House ACT 山口です。

> -> value をこえない最大の整数の値を返します
> 
> つまり、引数の値「以下」ではなく、値「より小さい」最も近い数
> という意味になるので 7020 < 7021 で 7020 が反ってくるのだと思います

value をこえない最大の整数の値というのは、引数の値「以下」という意味です。

今回の件は、70.21が2進精度の関係で70.20999...であるため、7021未満の最大
の整数 7020が返っただけです。

<?
echo floor(7021);                 // 7021
echo floor(70.21 * 100000);       // 7020999
?>

です。

任意精度数学関数で解決したとのことですが、精度が上がっただけで誤差は依然
として発生する可能性があります。有効桁数にもよりますが…。
小数を使用せざるを得ない場合は、誤差があることを前提にして、どこかで誤差
を吸収するロジックを組む必要があります。



PHP-users メーリングリストの案内