• 締切済み

エクセルROUNDについて、どうしても合わないんです。

(1)ROUND(105.225-96,2)答え10.23とROUND(105.225-95,2)答え9.22で困っています。どちらも、表示形式は標準で数値の桁数は0です。 どうして95を引いた場合10.23にならないのでしょうか? (2)ちなみにROUND(105.225,2)-95と-95だとどちらも??.23になりますが、ROUND(SUM(105.225-95or96),2)でも(1)と同様の答えになります。 考え方はよく分かりません。 分かる方、教えていただけないでしょうか?

みんなの回答

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

0.1、0.01、0.001は「2進数では、循環小数になる」ので誤差が出ます。 2進数で「キリの良い小数」は、以下の通りです。 0.5 (2分の1) 0.25 (4分の1) 0.125 (8分の1) 0.0625 (16分の1) 0.03125 (32分の1) 0.015625 (64分の1) 0.0078125 (128分の1) 0.00390625 (256分の1) 0.001953125 (512分の1) 0.0009765625 (1024分の1) 以下略 2進数で「0.1」を表そうとすると、 0.0625+0.03125+0.00390625+0.001953125+(以下略) と、上記の数字の足し算で表します。 すると「どこまで足しても、ピッタリ0.1にならない」と言う事が起きます。 10進数では、12587を99999で割ると 0.12587125871258712587125871258712587… と、同じ数字が循環する小数になります。 2進数では、同様に、1を10で割ると 0.00011001100110011001100110011001100… と、同じ数字が循環する小数になります。 2進数のコンピュータの世界では、このように「0.1、0.01、0.001は、割り切れない数なので、それらを足した、0.2、0.22、0.225も、割り切れない」のです。 コンピュータの「記憶域」には、大きさが存在します。データを無限に入れる事は出来ません。 なので「同じ数字が循環する小数」は「どこかで、バッサリ切り捨てて記憶する」事になります。 その「切り捨てた端数」が「微妙な誤差」として蓄積されます。 そして蓄積された「微妙な誤差」が、何かの計算でイキナリ表面化し、質問者さんのように「割り切れない数値のおかげで、割り切れない思いをさせられる」事になります。

ok2462
質問者

お礼

大変丁寧なご説明ありがとうございました。 循環小数+記憶域の限界があることをはじめて知りました。 お陰でスッキリすることが出来ました。

  • pkg84684
  • ベストアンサー率50% (2/4)
回答No.1

少し長いですが以下のサイトに詳細な説明が書いてあります。 エクセルの都合上、小数点以下は正確ではないみたいです。

参考URL:
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg1.shtml
ok2462
質問者

お礼

サイトにあるように、小数点の桁数を増やしていき確認しました。 エクセル上の小数点がパーフェクトでない事をはじめて知りました。 ありがとうございます。朝からの悩みをすっきりすることができました。