[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 メーリングリストの案内