• 締切済み

EXCELの小数計算について

EXCEL97で小数計算をすると誤差がでるのですが何故ですか? A列に14.60を数値入力  B列に13.90を数値入力  C列に=B1-A1の数式をいれると-0.70となるはずなのにどういうわけか -0.699999999999999と表示される。 小数点以下14桁目までは-0.70000000000000と表示されるが15桁目で上記のように表示される。 表面上はROUND関数などで処理できるのですが複数の数式を組み合わせて計算している時は-0.69999・・・の数値をもって計算される場合があり誤差がでる。 消費税や金利計算などで1円でも誤差がでると表計算の正確さが問われてしまう。 0.7の他にも 次の場合もでる 0.2のとき0.1999・・ 0.3のとき0.2999・・・・ 0.8のとき0.7999・・・・ これはEXCELのバグなのでしょうか?

みんなの回答

  • kbonb
  • ベストアンサー率51% (254/492)
回答No.2

こんにちは  以下のページもご参考になるのでは? Housaka's Home Page-エクセル奇譚 http://member.nifty.ne.jp/housaka/kitan01.html Housaka's Home Page-エクセル奇譚 ~ 誤差アラカルト ~ http://member.nifty.ne.jp/housaka/kitan011.html [XL97] 浮動小数点数値演算の結果に含まれる丸め誤差について http://www.microsoft.com/japan/support/kb/articles/J042/5/26.htm [XL97] 数値を比較した結果が正しく返らないケースについて http://www.microsoft.com/japan/support/kb/articles/J042/5/24.htm [XL97] 特定の小数部を持つ数値を入力した場合に誤差を生じる http://www.microsoft.com/japan/support/kb/articles/J042/5/25.htm [XL] 浮動小数点の計算誤差と IEEE フォ-マット http://www.microsoft.com/japan/support/kb/articles/J013/9/67.htm ROUND関数の結果を正常にするには? http://cgi.fuji.ne.jp/~fj2094/cgi-bin2/wwwlng.cgi?print+200009/00090045.txt 四捨五入するには http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200005/00050122.txt 入力規則が正しく判定されないんです http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200012/00120088.txt 計算結果がセルの表示と異なるのは? http://www.moug.net/boards/exopr/questbbs.cgi?ShowTopic=./logfiles/200009/00090086.txt

参考URL:
http://www2.odn.ne.jp/excel/
  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.1

これはEXCELに限らずパソコンで小数点の計算をするときには避けられない部分 ですね。 有効桁数を設定して計算するしかないでしょうね。小数点以下15桁使うような計算 は別の手段を使うべきだと思います。 EXCELのヘルプで「ワークシートとブックの仕様」というページを探してくださ い。様々な制限事項が書かれています。

hiro_cp
質問者

補足

ありがとうございました。EXCELのヘルプで「ワークシートとブックの仕様」を見てみました。いろいろな情報がありヘルプにこんなにたくさんの項目があるとは知りませんでした。 質問には小数点以下15桁の表現をしましたが実際小数点以下15桁使うような計算はしていません。 14.60-13.90=0.70は常に小数点以下3桁目を切り捨てるrounddown関数を使用していて0.69の表示がされたので計算違いが出ていると気が付いたのです。どうして0.70の表示にならなかったのか不思議に思い質問しました。 パソコンで小数点の計算をするときには避けられない部分では仕方ないですね

関連するQ&A

  • エクセルで小数点を表示したい

       A    B     C 1 コード データ  結果 2   1   1000   1000 3   2   1000   100.0 4   3   1000   10.00 5   4   1000   1.000 エクセルで上記のような結果が得られる計算をしたいです。 コードを参照し、 1ならばそのまま表示 2ならばデータを10で割り小数点以下を1桁表示 3ならばデータを100で割り小数点以下を2桁表示 4ならばデータを1000で割り小数点以下を3桁表示 結果の列に =IF(A2=1,B2,IF(A2=2,B2/10,IF(A2=3,B2/100,IF(A2=4,B2/1000)))) という数式を入れたのですが、小数点以下が100.0の筈が 100等と整数として表示されてしまいます。 表のように表示させるにはどこに手を加えたら良いのか どなたかお教え頂けませんでしょうか?

  • エクセルの時間計算について

    エクセルで時間の計算をしたいのですが、うまくできず困っています。 A列には 1315、747、など3~4桁の数値が、B列にも 1532、916など同じく3~4桁の数値が入っています。これはそれぞれ 13:15、7:47、15:32、9:16のように時刻を表しており、A列は活動開始時刻、B列は活動終了時刻となっています。 C列には「TEXT(A2,"0!:00")-TEXT(B2,"0!:00")」という数式を入力し、実質活動時間を計算しています。 このようなデータが約9000行あります。C列の活動時間を合計して、時間数を出したいのですが、どのような計算式を用いればよいでしょうか?SUMでは出ないようですので・・・ ややこしいですが、お知恵をお貸し下さい。よろしくお願いします。

  • excel 小数を含む数値を色付き表示させたい

    エクセル初心者です。 A列、B列に数値が入力さておりA列÷B列=C列と計算させます。 この時の答え(C列)が整数であればそのまま。小数が発生する場合はその値(セル)を色付きで表示させることは可能でしょうか? 例)    A   B   C    20   5    4 ←OK   30.3  10.1    3 ←OK    10   3  3.33 ←この部分 

  • エクセルで0値を計算の対象にしない方法

    エクセル表で以下の状態の時の計算式が分かりません。 A1~A18までそれぞれ数値が入っています。(小数点以下1桁) B列にそのA1~A18までの順位が表示されるような計算式を入れました。(順位は数値が小さい順です) =IF(A1="","",RANK(A5,A:A,1)) これで順位が表示されるようにはなりました。 ここからが今回困ってる点です。 このシートでは毎回違う数値がA列に入ります。 その都度A列の何行目まで数値が入るかは決まっていません。 最多の場合でA18まで、最小の場合でA8までです。 しかし18より少ない場合には0値が入るようになっています。 (0値は表示させていません) 上記の計算式では例えばA13まで数値が入った場合、 B列に表示される順位はA列に何らかの数値が入った業は順位が表示されますが、 0値の入った行の順位は1と表示されてしまいます。 つまりこの場合1位が5個(14行目~18行目)もあり、その次の順位が6から始まってしまいます。 私の望んでいることは、A列に0値が入ってるセルはB列に表示する順位の対象にしないことです。 エクセル初心者でも理解できるような回答をよろしくお願いいたします。

  • エクセル浮動小数点演算誤差?が見えない

    エクセル2010です。 BOOK-AのシートBのE7セルに0.822という数値が入っています。 見た目も、数式バー上も0.822です。 BOOK-BのシートCのE7セルにも0.822という数値が入っています。 見た目も、数式バー上も0.822です。 ところがこれを =[B.xlsm]Sheet1!E7=E7 で比較すると、falseが返ります。 これまで浮動小数点演算誤差で、見た目がおなじでも小数点以下かなり下の方で違いケースは経験していましたが、その場合でも小数点以下の表示を20位くらいまで表示させると違いが表れました。ところが今回は小数点以下30位まで表示させても0.822000000000000000000000000000で誤差が見えません。でもfalseになります。 こんなことってあるんでしょうか?

  • Excelで文字列の数式の結果を表示するには?

    過去ログ等調べたのですが、ぴったりくるものがなかったので質問させてください。 Excelで文字列として数式を入力して、 別のセルで計算結果を小数1桁でroundして表示させたいです。 数式は四則演算と( )です。 ファイルを共有しているので、アドインは使いたくないのですが、何かいい方法はあるでしょうか? よろしくお願いします。

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

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

  • 1セルに6桁以上入力できない。小数点以下の表示が00になってしまう。

    エクセルの1つのセルに1,000,000と入力するも1,000となってしまいます。 数式と値をクリアにしても、表示形式を標準や数値や文字列に設定しても下3桁が入りません。 それと小数点第2位まで計算したいのに、小数点第2位は.00なってしまいます。 それと小数点以下を切り捨てで表示させたいのに、四捨五入になってしまいます。

  • EXCEL 計算式が合っているのに答えがゼロ?

    分かりにくいかもしれませんがお付き合いお願いします。 列Bの数値データの合計を求め、列Cにその構成比率を求める時に出た現象です。 列Cの構成比率を求めるべきセルに式(「=」、列Bの1セルをクリック、「/」、列Bの合計をクリック、F4)を入力しエンターキーを押したところ、 0 となりました。 求めた式はセル指定での式になっており、立式に問題はなく、指定されたセルには既に数値が入力してあります。 (もちろん計算結果が0となるようなものではありません) セルの書式設定等で表示形式を変えてみましたが、どの場合においても0で変わりがなく、結局のところ0しか出ませんでした。 (もちろん桁上げや桁下げ、%表示にしてから桁上げ桁下げもやりました) (ROUNDなど関数による桁上げ桁下げは指定していません) 一旦、そのセルを消去し、数値式(セルに入力した具体的な数値でそのまま計算)にすると、答えは正常に表示されました。 再度、セルを消し、セル指定で式を書くとまた、0になりました。 (同じく書式設定等で確認しましたが、すべて0になりました) 納得がいかず、一旦パソコンを再起動し、同様の操作をしたところ、一発で構成比率が求められ、計算結果も間違いはありませんでした。 そう考えると、セルに記憶されるべきデータが正常に読み込めていないのが原因かなと思ったのですが、 そうなるということはハードの問題という可能性もあるのでしょうか。 たまたま何らかのバグが発生し計算ができなくなったのでしょうか。 再度同じような現象に見舞われたらと思うと、心配で質問させていただきました。 EXCELの構成に詳しい方からの回答をお待ちしております。

  • エクセル浮動小数点の問題?

    添付画像のような表があります。 A1:A5には数値が入力してあります。 1つずつ中を確認し、表示通りであることを確認しています。 D1セルは =ROUNDDOWN(20000/640800,2)+0.005 の数式で、0.035が表示されています。 D3セルは =D1=A4 の数式でTRUEが表示されています。 D5セルは =VLOOKUP(D1,A1:B5,2,FALSE) の数式で #N/Aエラーが返っています。 たぶん、エクセル特有の浮動小数点の問題ではないかとあたりをつけ、 D5セルを =VLOOKUP(ROUND(D1,3),A1:B5,2,FALSE) に変えると、ちゃんと4が返りました。 でも、そうだとすると、=D1=A4の数式でTRUEが返るのはなぜですか? ROUND(D1,3)としないとA4とマッチしないのですから、=D1=A4の式はFALSEが返るはずですよね?

専門家に質問してみよう