【エクセル】小数点の計算ができなくなる怪
おはようございます。こんにちは。いたをです。
暑い日が続いていますね。皆様いかがお過ごしでしょうか。
今日は暑さも吹き飛ぶ(本当かいな!)エクセルの怪談(?)。
エクセルは「1.2-1.1」の計算ができない?
皆様のエクセルでもこんな体験したことはありませんか?
上の図のようにB2セルからC2セルを引き算してみます。
まぁ誰が見ても分かるような簡単な数式です。
答えも0.1となり、自分が想像している結果と一致したはずです。
一応検算してみましょう。
正しいようです。
それじゃ、下の3列目のところも検算してみましょう。
あれ、おかしいですね。
E1セルの0.1はベタ打ちなので、計算式の結果が違うということになります。
でも、表示は0.1で見た目には同じ・・・。
エクセルって、計算間違うことがあるの???
1.2-1.1の答えは??
D3セルの計算結果を確かめてみましょう。
D3セルを選択して、小数点以下の表示桁数を増やしてみましょう。
小数点第16位まで伸ばしていくと、なんと
0.099999…となってしまいます。
そうなんです。計算結果は正しくないようです。
これはもしかして、エクセルの重大な不具合なのでは!
そう思った人もいるはず。
この0.1がその後の計算式にも使われていくことでその後の数値に影響が出てくるかもしれないと考えると、ちょっとどうなのかなぁ・・・と思ってしまいますよね。
ところが、この怪奇現象。
マイクロソフトさんに言わせると、「仕様」のようなんです。
小数の計算が苦手だったエクセル、その訳は・・・
どうやらエクセルにとって、小数点以下の計算を正確に行うのは難しいことらしいのです。
コンピュータでは2進数を用いています。2進数は0と1で表現する数値。整数を表すときに2,4,8……と2の倍数の組合せであらわします。小数もそれと同じで、1/2,1/4,1/8,……の組合せであらわしていくのですが、2進数では無限桁の小数になってしまうことが起こってしまうのです。
10進法で「0.1」というのは、キリの良い数字に見えますが、コンピューターが認識する「0.1」は、2進数なので、無限に小数点が続く値。
ですので、今回の「0.1」は、自動的にチョコッと丸められた、「0.1」に限りなく近いが、0.1とは異なる数字であるということ、なんですね。
なるほど。エクセル(コンピュータ)の仕様でしたか。
それでは何か対策はないのでしょうか。
ROUND関数を使って丸めてしまえ!
実は先ほど紹介したマイクロソフトのサイトに、解決方法が2つほど紹介されています。
今日はその中の一つをご紹介しましょう。
それは、ROUND関数を使って値を丸めてしまうこと。
具体的にはROUND関数を使って「四捨五入」してしまえば問題ないですね~、という方法です。
今回はB列からC列を引いた値にROUND関数を仕込んでいます。
引数/桁数の項目は小数点以下の一桁目までということなので「1」を入れています。
どうでしょう。「0.10000000…」となっていますね。
検算の結果も「TRUE」となっています。問題ないようです。
まとめ
いかがでしたでしょうか。
今回のような演算で生じる誤差は、ごくわずかな値なので、通常の計算で支障が出ることはまずないのですが、今回のように判定(検算)をする場合や、切り上げ、切り捨てなどの処理を行う場合には、「おや、おかしいぞ!」というケースが出てきます。
エクセルは、色んな計算が出来る便利なアプリですが、まさかの小数の計算が苦手だったとは・・・(笑)。
そんなわけで「納涼」エクセルでした。
それではまた。
さいごまで読んでいただき、まことにありがとうございました。 もし面白い記事だったなぁと思っていただけたら、是非!ぜひ「スキ」や「シェア」をお願いします。 戴いたサポートは、皆様の応援に使わせていただき、時々モチベーションUPのためのビール代に使わせてくださいまし。