[PHP-users 1517] Re: 小数点以下の四捨五入について

Naofumi Kondoh php-users@php.gr.jp
Fri, 24 Aug 2001 21:47:40 +0900


ソフト工房の近藤です。

Osamu Shigematsu wrote:
> 
> 重松です。
> 
> とりあえず、四捨五入にはならないですが、
> sprintf(), number_format() を使うという方法もありますね。
> あとは、0.0005 を足すとか?
> # それなら、素直に、1000 倍して round() して、1000 で割ればよい気もしますし。

round() 関数ですが、PHP3 と PHP4 では、実行結果が
違うようなので注意が必要です。

PHP3: round(2.5) は、2 になります。(PHP 3.0.18 国際化版)
PHP4: round(2.5) は、3 になります。(PHP 4.04 )
OS : Linux (TLJ WS 6.0) glibc-2.1.2

仕様変更になったんですかね。

マニュアルでは違いが読み取れないですが、ソース見てる
暇がないのでどなたか詳しい方、フォローお願い。

http://www.php.net/manual/ja/function.round.php

少くとも PHP3 の round()は、所謂四捨五入ではなく、
Banker's Rounding という方式で、小数部が .5 の時、
常に切り上げるのではなく、切り上げ/切捨てを交互に
行なう方式です。google などで Banker's Rounding とか
IEE754 で検索してみてください。
# 確か整数部が偶数で .5 の時は切捨て、奇数の時は
# 切り上げだと思いました。

過去ログ検索で、 round で検索してみてください。
http://ns1.php.gr.jp/cgi-bin/namazu.cgi

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文        Email:  nkon@shonan.ne.jp 
PostgreSQL+PHP ソースコードジェネレーター セミナースライド
          http://www.shonan.ne.jp/~nkon/cslpg.a.semi/
          http://www.SOFTKOUBOU.co.jp/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/