アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルで、6.0 6.1 6.2 ・・・・・・と入力したいと思い、6.0と6.1を範囲指定して、下にコピーしたら、表示上は、問題なかったのですが、セルにカーソルをあわせると、8.19999999999みたいな数字がところどころにあったのですが、これは何でしょうか。また、これを防ぐにはどう入力すればよいでしょうか。よろしくお願いします。

A 回答 (5件)

こんにちは。



>下にコピーしたら、表示上は、問題なかったのですが

ドラッグダウン・コピーの仕組みというのは、

6.1 - 6.0 =0.1 の差を取って、その差を、次の出てくる数に足しているわけなのです。小数点を含む計算の中で、『引き算』と『割り算』は、「浮動小数点丸め誤差」といって、正しい計算が出てこないことがあります。

典型的な例では、時間計算が該当します。
ですから、比較演算子を使った、< , >, = などは、違った結果になってしまいます。

原則:
小数点を含む、引き算や割り算は、丸め誤差が発生することがあります。
関数のMOD,CEILING,FLOOR に、見かけ上は、引き算はなくても、小数点を用いると誤差が発生することがあります。

逆に、「計算上で、引き算や割り算の仕組みを作らない限りは、発生しません。」

数値は上から15桁までが有効であり、16桁目以降は不正確です。つまり、無限小数の発生する場合は、数値で、正確に表現することは不可能です。

(時間)-(時間) は、原則的に丸め誤差が発生します。

対処法:
文字列から数字を取る方法(小数点固定法)
 VALUE(FIXED($A$2-$A$1,1))

整数にして計算する方法(整数変換法)
 ($A$2*10-$A$1*10)/10

通常は、整数にするか、一旦、文字列にします。ワークシートでは、ROUNDUP やROUNDを使う人がいますが、気をつけて使わないと、違う結果になることがあります。使う場合は、よく調べてみる必要があります。また、よく誤解している方がいますが、定数には、浮動小数点誤差は存在しません。演算して始めて誤差が出ます。

#2さんで解答は既出ですが、
A2~
=$A$1+ROW(A1)*0.1
(定数が必要な場合は、範囲を選択して、右クリック-形式を選択して貼り付け-値をクリック)

このような式で作ってみて、ドラッグダウン・コピーしてみてください。それを、前回のドラッグダウン・コピーでつくったものと比較してみてください。A16 以降はずれているはずです。

なお、これは、日経PC21のその「表計算の丸め誤差」を発表した方はご存知なかったようですが、これは、既に、MS-DOSの時代に、1980年代後半に、ロータス社、マイクロソフト社、両社で、その発表をしたもので、関係者では周知のことです。しかし、それでもなお、MS-DOSの表計算のほうが、この誤差の発生することが少なかったのです。特に、金利や為替を扱う経理関係者の中で対処が促されたことですが、関係者にとっては、ある意味致命的な問題です。

#3のimogasiさんのおっしゃるように、私も、ことさら気にする必要はない、と思っていますが、対処法を把握していれば、十分だと思います。

日経PC21の記事の内容はセンセーショナルな割には、針小棒大になってしまい、逆にうやむやになって理解しにくくなった気がします。
    • good
    • 0

どうしてそうなるのか難しいことは分かりませんが、6.0と入力したらセルの右下にカーソルを合わせて(+の形になります。

)右クリックしたまま下にドラッグします。
出てきたメニューから、連続データをクリックします。
出てきた画面で加算・増分値を0.1にしてやると仰るような現象にはならないようです。
    • good
    • 1

理解するには、相当な前提となる知識が要りますよ。


http://pc21.nikkeibp.co.jp/special/gosa/eg1.shtml
をじっくり読んでください。
エクセルでも他でも小数点つきの数(実数)ではそのようになります。
浮動小数点演算を使っているからです。
上記WEBページのうち直接の関連箇所は
http://pc21.nikkeibp.co.jp/special/gosa/eg4.shtml
>これを防ぐにはどう入力すればよいでしょうか
上記WEBページに解説してあることを理解することです。
余程、学が進むまでは「気にするな」ということになるでしょうか。
その他
http://oku.edu.mie-u.ac.jp/~okumura/software/exc …
http://www.kentei.ne.jp/quali/column/knowhow/030 …
    • good
    • 0

A1を6.0(表示形式の数値で小数点以下の桁数は1)とすると、A2に


=A$1+(ROW(A2)-1)/10
と入力し、下にフィルハンドルでコピーするとそのような数値表示は出ません。
もちろんそのままカーソルを合わせても計算式だけしか表示されないので、A列をB列にコピー→値のみペーストし、表示形式を少数点を10桁ぐらいにして試してみて下さい。.9999999は出ないと思います。

同じような式でもA2に
=A1+0.1
としたときは、フィルハンドルコピーした場合、7.5ぐらいで「7.49999999」のようになりますね。
単純に6.1:6.2を選択して下にフィルハンドルコピーしたときもそのようになります。私では理由は分からないので、他の方の回答に期待ます。
    • good
    • 0

書式メニューのセルで表示方法を決定のうえ、小数点以下の桁数を指定します。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!