PHPとExcelの丸め方

Matzにっき(2007-05-28)hnwの日記 - PHPの奇妙なround関数PHP Bugs: #24142: round() does 5.045 to 5.04 instead of 5.05,無知は恐ろしい!

Excelの演算誤差という駄文を書いたことがあるが,最近のExcelで検証していない。どなたか詳しく調べてくれないかなぁ。

IEEEの話かと思った

# 御無沙汰してます。

一瞬、IEEE 754 の話かと思ったのですが、違うんですね。

Re: IEEEの話かと思った

あれれ,どうもご無沙汰しています。
IEEE 754も含めて2進の浮動小数点数に共通する話です。10進で有限小数でも2進で無限小数になるので0.01を100回加えても1にならなかったりするわけですが,素人はそれがわからずバグだと騒ぐので,素人対策におかしな処理を入れることによって,玄人の数値計算に使えないような仕様になってしまうという話です。昔のTurbo PascalのようにBCDを選択できるようにするのも手かもしれません。

MySQLでもROUNDは環境依存?

日本MySQLユーザ会のFAQではROUND()について以下のような説明をしていました。

プラットホーム独立なソフトウェアにとってROUNDは鬼門なのでしょうか

http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_10

四捨五入 ROUND() は四捨五入ではない場合がある。OS の C ライブラリに依存する。

確実に四捨五入したければ、FLOOR() か TRUNCATE() を使用する。
FLOOR(c+0.5) や TRUNCATE(c+0.05, 2)

Re: MySQLでもROUNDは環境依存?

いえ,それはそれでいいのです。このPHPの話はそういうレベルではなく,笑っちゃうような処理が含まれているというのが問題です。

Re: MySQLでもROUNDは環境依存?

そうですね。わたしも「IEEE 754 の round to even の話」と書こうとして端折ってしまったのでした。

Re: MySQLでもROUNDは環境依存?

そうなんです。そういうレベルの話ならいいのですが,単にコンピュータが2進であることを知らないタコユーザが,期待通りに働かないとケチをつけて,その場かぎりうまくいくように0.000...01を足したりするような傑作な処置をしたという話のようです。

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。