• 締切済み

エクセル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
質問者

お礼

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

関連するQ&A

  • round 関数

    http://pcstory.blog40.fc2.com/blog-entry-172.htmlの round,rounddown,roundup 関数の求め方なのですが 元データを 表示形式 rounddown round roundupで処理しています。 具体的な求め方が分からない部分がありますので 教えてください。 表示形式部分は 568~775を選択し、右クリック、セルの書式設定 表示形式、数値、桁数を0にすると求められると思っています。 その下の round,rounddown,roundup 関数の具体的な求め方をお願いします。

  • ROUND関数

    %表示で少数第1位未満を四捨五入しなさいという解答欄のセルに、85.1%という数字が入力されています。 数式を見てみると、=ROUND(D4/C4,3)になっています。 =ROUND(数値、桁数)にはずなのに、なぜ3という数字が入っているのか分かりません。なぜでしょうか?

  • エクセルのROUND関数について

    ROUND関数で、9.0024という数字を2桁で丸めようとすると 結果が9.00ではなく9になってしまいます。 これを.00まで表示させるにはどうしたらいいでしょうか?? ちなみにROUND関数の(数値)の部分には、また別の関数が入っています。そのせいでしょうか? ただ単に、数値のところに数字を入力して2桁で丸めてみたところ9.00と表示されました。 数値の部分が関数だとダメなのでしょうか? いい方法があれば教えてください。

  • 計算に使うエクセルの数値の表し方について

    初歩的な質問かもしれませんが… エクセルのセル間で、計算式や関数を使って計算を行うと、答えが6.10479547238…などと割り切れない小数になることが多いです。 これを、例えば小数点以下3桁で表示させるには、書式の表示形式を数値にして桁数を3で指定する方法と、ROUND関数を用いて引数を3にするやり方が考えられます。 この計算結果の数値を用いて、さらに別の計算を行う場合(例えば各計算結果の平均値を出すなど)、どちらのやり方で丸めたものを用いた方が正確でしょうか?

  • ROUND関数について

    EXCEL97を使用しています。 ROUND関数で桁数を1にした場合、 例えば結果が3.1なら“3.1”と表示されるのですが、 3.0だと“3”としか表示されません。 これは仕様でどうしようもないのでしょうか? もしも解決方法をご存知でしたら御教授下さい。 なお、セル内で複数の数値と文字列をつなげており、 セル書式では対応できません。 また、IFとMODを併用して1で割り切れる数値には “.0”を文字列として付加する方法は考えたのですが、 式が長くなるので個人的に気に入りません。

  • エクセル計算 答えは同じなのに表示が違う

    エクセルで下記2種類の計算式をいれて計算すると、 答えは両方とも3.355になります。 書式設定で 表示形式-数値-小数点以下の桁数を2にしてみると、 答えが違ってきます。 なぜでしょうか? =75-(143.84/2)+(0.45/2)+0.05 =3.36 =((143.84/2)-0.225-75)*-1+0.05 =3.35 『表示形式-数値-小数点以下の桁数』この設定は 計算途中で桁数を2にして計算してしまうのでしょうか?

  • エクセルのROUND処理について教えて下さい。IF関数で条件指定

    詳しい方、教えて下さい!! エクセルで見積書を作成していて、素人ながら一応数式を入力して金額 が算出できるようにしています。その中で、ROUND処理をIF関数で条件 を指定した中で異なる桁数の数字に行いたいのですが、どうすればよい か分からず試行錯誤しています。 つまり、    A  B  C   D     E    F    G 1  1.0 式 空白 106,300 80% 85,000  85,000 2 89.0 m 1,900 169,100 80%  1,500 133,500 というデータで、 Cのセルには=IF(OR(A1=1,A1="",F1=""),"",ROUND(F1/E1,-2)) Dのセルには=IF(OR(A1="",E1=""),"",IF(A1=1,ROUND(F1/E1,-2),A1*C1)) Gのセルには=A1*F1 の数式の結果がそれぞれ入っています。 見積として客先に提出するため、Aのセルが1の場合はCのセルを空白に してDのセルにのみ数式の結果が出るようにしたいのです。 が、F1のセル(5桁)とF2のセル(4桁)のように数値の桁数が違う場合 に、四捨五入を行う桁数をそれぞれにF1=-2、F2=-1とする方法が分から ず困っています。桁数が違う場合には手入力で四捨五入の桁数を変えれ ばよいのでしょうが、それだと手間がかかる上に桁数の変更を忘れてし まうことがあり、間違いのもとなので、間違いにくい方法で数式を組み たいのです。 詳しい方、解決方法があれば回答お願い致します。

  • =SUM(ROUND(A1,0),ROUND(A3,0),ROUND(A10,0))をもっと簡単に

    エクセル200です。 A1、A3、A10の各セルにある数値を四捨五入してから合計するのに =SUM(ROUND(A1,0),ROUND(A3,0),ROUND(A10,0)) でできるのはもちろん存じておりますが、もっと簡単に書く方法はないでしょうか? A2、A4からA9までのセルが空白であれば =SUMPRODUCT(ROUND(A1:A10,0)*1) A2、A4からA9までのセルが文字列であれば {=SUM(IF(ISNUMBER(A1:A10),ROUND(A1:A10,0),""))}(配列数式) でできるのですが、数値であるために使えません。 上記のA1、A3、A10はあくまで一例で、実際は同一列ではありますがもっとセル数が多いのです。そのため簡単に書ける方法を探しています。 よい方法があればご教示くださいませ。

  • エクセルについて教えてください。

    エクセルは独学で覚えたので、曖昧に覚えてしまい困っています。よろしくお願いします。 エクセルの関数で ROUND関数があります。 ROUND は四捨五入 になると思いますが、 ある計算を ROUND でやり、答えを 四捨五入して整数で出します。 同じROUNDを使って、その計算を 5つ程度して その 出た(5つの) 答えを合計(SUM)します。 私はエクセルにあまり詳しくないので、分かりませんが、単純に ROUNDで整数にしたのだから、合計も整数で合うはずだと思うのですが、 なぜか、合計が 1 違う場合が多々あります。 説明が分かりにくくてすみません。 例えば、合計が 本来は 125  と ならなければならないのに、 ROUNDで出した 答えを すべて 合計(SUM)すると  126 とか 124 と 1つ ずれて表示されてしまいます。 私のROUNDに関する覚え方が間違っているのでしょうか? それから、ROUNDでだした 答えを 整数のままで足し算をして、合計が合うように計算をするにはどうしたらよいでしょうか? よろしくお願いします。

  • ROUND関数…小数点第2位で切り上げ・切り捨て

    お世話になります。 Excel2003を使用しています。 計算結果の数字を別セルに・・・97.759はROUNDUP(97.759,1)で97.8 同様に…103.103はROUNDUP(103.103,1)で103.2になりますが、本当は103.1としたいのです。 →小数点第2位が0の時は「切り捨て」1以上は「切り上げ」したいのです。 IF(「小数点第2位が0」,ROUNDDOWN(103.1,1),ROUNDUP(103.1,1)) で、いいかと思うのですが、「小数点第2位が0」の条件がうまくあらわせないため、完成できません。ROUNDを使ってもできそうだとは思うのですが、ちょっとだけ焦りも加わり、なかなか整理ができません。この考え方はあっているでしょうか?皆様のお力を貸していただければありがたいです。 ちなみに… セルの表示形式は「数値」 小数点以下の桁数は「1」 負の数の表示形式は「-1,234.0](今回、数値は負になることは有りません。)

専門家に質問してみよう