[PHP-users 24727] Re: 四捨五入

菊澤 正明 kikuzawa @ cyber-coo.com
2005年 2月 26日 (土) 13:17:38 JST


菊澤 です。

あれからいろいろ試したのですが、環境Aでは、1.005は
1.00499...として内部では表現されているようです。
ですので、number_formatをかけると1.00になってしまう。

$a = 1.005;
echo (int)($a * 1000);
の結果が、1004になってしまいます。

回避するには、一旦文字列にしてやるとうまくいきます
echo (int)(string)($a * 1000);

文字列にする際に1004.999...を1005に変換するようです。
1005にも内部丸目誤差でるとまずいですけど。

On Sat, 26 Feb 2005 12:57:42 +0900
lange <lange @ style.ne.jp> wrote:

> tosaと申します。
> 
> > number_format関数の仕様が変わったのでしょうか?
> > それともOSの問題でしょうか?
>  手元で実験してみました。
> 環境別では次のようになりました。
> 
> OS Linux + PHP-4.3.10
> 結果
> 1.01
> 2.01
> 3.01
> 
> OS Windows2k + PHP-5.0.1
> 結果
> 1.00
> 2.01
> 3.01
> 
>  OSによる丸め誤差の違いのような気もするんですが、詳しい事
> は識者の方にお任せいたします。ちなみに
> http://jp.php.net/round
> のstdroundという方法を使うと求めたい値が得られるかもしれま
> せん。
> 
>  では失礼します。
> 
>  tosa lange @ style.ne.jp
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3

--------------------------------------------
菊澤 正明  mailto:kikuzawa @ cyber-coo.com
(有)サイバー・クー http://www.cyber-coo.com
phone.03-5785-4658 fax.03-5785-4659



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