[PHP-users 34459] Re: ceil関数について

home mayo @ b-gets.ddo.jp
2009年 3月 23日 (月) 15:13:50 JST


さわだ様 豊丹生様

ご返答、ありがとうございます。

ご提示していただいたページは見ていたのですが、

>0.1 や 0.7 のようなシンプルな小数であっても、 
>それを内部的な二進数表現に変換する際には、
>どうしても多少精度が落ちてしまいます。 

少数じゃないし!って思って無視していました。

結論としては、正確に計算したければ
「任意精度数学関数または gmp 関数を代わりに使用してください。 」
ということですね。

ちょっと検討してみます。

解決。納得しました!!
ありがとうございました。

> 豊丹生と申します。
> 
> > float(1005)
> 
> 最初のこの時点でintではなくfloatになっているという時点で、
> 小数点のかけ算が正確にはできてないことになると思います。
> 
> http://us.php.net/float
> の「警告」にあります。
> 
> 1500 * 67 / 100
> と比較すると違いが分かるのでは。
> 
> ----- Original Message ----- 
> From: "home" <mayo @ b-gets.ddo.jp>
> To: <php-users @ php.gr.jp>
> Sent: Monday, March 23, 2009 2:38 PM
> Subject: [PHP-users 34454] ceil関数について
> 
> 
> > こんにちわ。
> > 寺尾です。
> >
> > 久しぶりの投稿になりますが、ceil関数の挙動について
> > 不思議な現象が発生しましたので、ご教授いただきたく思います。
> >
> > $a = 1500 * 0.67;
> > var_dump($a);
> >
> > $b = ceil($a);
> > var_dump($b);
> > 上記のスクリプトを実行しますと下記のような結果が返ってきます。
> > float(1005)
> > float(1006)
> >
> > マニュアルを見ますと
> >
> > value  の次に大きい整数値を返します。
> >
> > とあります。
> >
> > そこで試しに下記実行、
> > $c = (float)1005;
> > var_dump($c);
> > $d = ceil($c);
> > var_dump($d);
> >
> > 結果は、
> > float(1005)
> > float(1005)
> >
> > となりました。
> >
> > 私としましては、結果はすべて
> > float(1005)
> > となるものと思っていたのですが。
> >
> > 上記の挙動はどのような現象なのでしょうか。
> >
> > 質問の仕方がいまいちわからなかったので、
> > ぐだぐだな文章になってしまいましたが、
> > 何卒よろしくお願いいたします。
> >
> >
> > _______________________________________________
> > PHP-users mailing list  PHP-users @ php.gr.jp
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://oldwww.php.gr.jp/php/novice.php3
> >
> > 
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3

-- 
 <>



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