プロが教えるわが家の防犯対策術!

お世話になります。

画像のとおり、数式を入力して、引き算で小数点以下の数値を出そうとしています。
「0.5」という答えを期待しているのですが、実際には「0.500000000000455」となってしまいます。

この式を「0.5より大きい場合は」というif関数につなげたかったのですが、上記の答えではtrueになってしまい困っております。

どこに原因がありますでしょうか。
宜しくお願い致します。

「Excelで小数点以下の値が正常に得られ」の質問画像

A 回答 (4件)

こんばんは。


何らかの誤差(例えば、10進2進変換、扱える桁数とか)が出たのではないですか?

一例ですけど、0.5という小数点1位が重要なので、10倍して、切り捨てて、10で割る
にすると、回避はしてくれますね。
以下の関数は78*1000*0.1005/2の方だけで試して、0.5になりました。
添付図が見にくいかも?。

やりたいことは(数値x10)を切り捨てた後、10で割ることです。

trunc側も10倍して、trunc関数に通して、10で割るやり方も
=(ROUNDDOWN(10*78*1000*0.1005/2,7)/10-TRUNC(78*1000*0.1005/2))

別にこれにこだわらなくても、他の関数でも可能です。
ご参考まで。
「Excelで小数点以下の値が正常に得られ」の回答画像1
    • good
    • 0

2進数の小数点以下の計算における微小誤差の話ですね。



有効桁を決めて計算をさせるようにしましょう。
それで解決しますよ。

それが面倒と思うのであれば、TRUNC関数の結果を10倍にしてみましょう。
それに伴い、引き算される元の数値も10倍する必要があります。
そして引き算された数値を10で割れば、キリの良い0.5になります。
 =(78*1000*0.1005/2*10-TRUNC(78*1000*0.1005/2)*10)/10

ちなみに、この10倍の根拠は「0.5」という数値を整数化することを目的としています。
「0.25」を整数化したいなら100倍ってこと。
・・・
まあ、こっちのほうが面倒なんですけどね。
    • good
    • 0

こんばんは。



浮動小数点丸め誤差と呼ばれている現象です。

整数法といって、整数にして計算させる方法。
小数点固定法といって、一旦文字列にさせてしまう方法。
それに四捨五入丸めを使う方法で、

Microsoft 側では、四捨五入を使う方法を推奨しているようです。

=ROUND(78*1000*0.1005/2,3)-TRUNC(78*1000*0.1005/2,0)

小数点固定として、こんな方法もあります。
=FIXED(78*1000*0.1005/2,3)-TRUNC(78*1000*0.1005/2,0)

後は、すでに既出ですが、10倍にして10で割るという整数法です。

Excel で浮動小数点演算の結果が正しくない場合がある
https://support.microsoft.com/ja-jp/help/78113/f …
    • good
    • 0

こんばんは!



横からお邪魔します。
他の方が回答されているように、浮動小数点誤差の影響だと思われます。
お示しの関数に限らず、時間計算等でも小数点以下の計算ではこのような状態になるコトがあります。
一番簡単なのは
ROUND関数を使って計算結果を小数点以下5~6桁で丸める方法だと思います。

例えば
=ROUND(78*1000*0.1005/2-TRUNC(78*1000*0.1005/2),6)

といった感じではどうでしょうか?m(_ _)m
    • good
    • 0

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