[[20110204095147]] 『小数の足し算をマクロで』(しんのすけ) ページの最後に飛ぶ

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

 

『小数の足し算をマクロで』(しんのすけ)

 Win7 エクセル2007を使用しています。
 VBA初心者的質問です。
 例えば
 セルA1に0.05 セルA2に0.1 が入力されています。
 マクロで 
 Dim A as Single
 Dim B as Single
 A=cells(1,1) 
 B=cells(2,1)
 cells(3,1)=A+B

 とすると、セルに0.15となる予定が0.150000004876
 というような表示になってしまいます。
 これは何故でしょうか?
 セルの書式は標準です。

 諸先輩方宜しくお願いします。

 SingleやDableの型って中身では2進数で記録してるんで小数に関しては10進数と微妙に差が出てきちゃいます。

 10進数だと小数は1/10+1/100+1/1000+1/10000+…で表わすけども2進数だと1/2+1/4+1/8+1/16+1/32+…で
表わすんで
 きっちり一緒にならないときもある。

 小数点以下が4桁までの場合はAとBをCurrency型でとってみて。

 もっと小数点以下の桁数が有るときは

 Dim A As Variant
 Dim B As Variant
 A = CDec(Cells(1, 1))
 B = CDec(Cells(2, 1))
 Cells(3, 1) = A + B
 という方法もあるよ。

 CDecはDecimal型に変換するんだけどもDecimal型はVarintにしか格納できないんで上のようにしないとならない。

 通貨型(Currency)と十進型(Decimal)は2進じゃなくて10進で記憶するんで誤差は出てこない。
 (春日野馨)

 春日野馨様 回答有難うございます。

 2進と10進で異なっているのですね。。
 variant型はメモリを食うからあまり使わん方がよいって教わっていたので
 使っていなかったです。でも実際にはこんな弊害があるなら、使うべしですね

 有難うございました。 しんのすけ

コメント返信:

[ 一覧(最新更新順) ]


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