[[20120823150702]] 『ROUNDDOWN関数がうまく機能しません。。』(鳥っこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ROUNDDOWN関数がうまく機能しません。。』(鳥っこ)
 数式で、1.4/12*3を計算したときに答えが『0.3499999・・・』になるのですが、
 その表示を『0.349』としたいのです。
 そこで『=ROUNDDOWN(1.4/12*3,3)』とした所、何度やっても『0.35』となってしまいます。
 さらに、『1.4/12*3』の『*3』の部分が3の倍数であったときも同じ現象が起きます。
 逆に『*4』や『*5』など、3の倍数でなければ正常に小数第3位で切り捨てられます。
 どうして3の倍数だけなんでしょう。。。
 どなたか知ってる方がいたら、教えてください(><)
 宜しくお願いします!!!!!


計算は合っていると思いますが、どうなってほしいの?
ROUNDDOWNは切捨てする桁数は指定できますが、表示する桁までは制御してくれませんよ。
=ROUNDDOWN(0,3)
だと表示形式標準では「0」にしかなりません。
表示形式で表示する小数桁数を指定して。
(みやほりん)

みやみほりんさん

 返信ありがとうございます!
 とりあえず、やりたいことは『1.4/12*3』の結果を『0.349』にしたいのです。。。
(鳥っこ)


それはそちらの計算が特殊ですね。

計算論理では、1.4/12*3 = 1.4/4 = 0.35 なので、
どのような理屈で 0.349 という計算結果になるのか、教えていただきたい。

以前も良く似たのを見かけたことがありますが、もしかして、電卓で計算すると、
0.3499999999・・・になるからそれに合わせたい、ということ?
(みやほりん)


 みやみほりんさん
 そのとおりです!
 ・・・おかしいでしょうかww
(鳥っこ)

 実際に算数として計算したときには 0.35 になりますが、それは置いておいて
 誤差計算のお話でしょうか。
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg1.shtml

 =1.4/12 を小数以下20桁くらいで表示してみてください。
 近似として実際の数値より大きい数値として取り扱っているのが見えると思います。
 ですから3倍すると元の数値より大きくなるため、マイナスの誤差が発生しません。

 別に3に限ったことではなく、誤差の方向と実際の表示が一致しているかいないかだけで、
 他の数値でも起りうる現象です。

 記事にも書かれていますが、小数の細かい部分での精度は使い方を気をつける必要があります。
 (Mook)

変形的な式を作って、解決しました!!

どうもありがとうございました!



探したら結構ありますね。
【関連ログ】
[[20100722102102]] 『計算結果の端数処理?』(今頃気付いた)
[[20060127082528]] 『少数以下切捨てについて』(杉楊)
[[20050722100832]] 『小数点以下の表示』(らん)
[[20110613130218]] 『小数点第3位を切り捨てする方法』(Yuka)

おかしい、というか、そういうルールになっているのなら、
これまで誰もおかしいと思わなかった、というのが不思議ですな。

掛け算、割り算が混合する計算は、割り算を最後に行うのが(電卓でも)セオリーのようです。

電卓は「1.4/12」の時点で、割り切れない部分をいったん端数処理しちゃってます。
それに3をかけても、本来の 0.35 とは計算されない。

これに対し、1.4*3/12 なら 0.35 になる。
うちの会社ではこんな計算したら筆算して確かめもしないのか、って怒鳴られる。

そういう数値がほしいのだったら、電卓と同じように、
「1.4/12」の時点での数値を先に出す必要がありますね。

12桁の電卓で今までやっていたのなら、
=ROUNDDOWN(ROUNDDOWN(1.4/12,12)*3,3)
とか。

(みやほりん)


 http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=154372&rev=0

 ↑でも、いくつか回答が出てたよ。
 ご参考まで。

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.