仕事で使うプログラムを作成しております。
次の計算で、zの値が"0.001"となって欲しいのですが、
"9.999999E-04"となってしまいます。
対策方法を教えて頂けないでしょうか?
よろしくお願いします
Dim x As Single, y As Single, z As Single
x = 5
y = 0.0002
z = x * y
対策1
z=round(x*y,3)
のようにround関数を使って四捨五入すれば良いと思います。
この例では第二引数の値は3としていますが,必要な精度に合わせた値にしてください。
対策2
zを文字列として出力するのならば,出力時に
dim str as String
str=Format(z,"###0.000")
のようにFormat関数を使って四捨五入する手もあります。
Single型やDouble型とは、そういうものです。
これは浮動小数点型が、数値を「2進数」で管理しているためです。
10進数表現では、「10÷3=」の結果が「3.3333…」となり、
有限の桁数では、誤差が生じてしまいますよね。
それと同様、2進数表現では、「1÷10=」などを正しく表現できません。
(0.5 や 0.75 などといった数であれば、誤差なく格納できますが)
もし、(10進数で見た場合の)演算誤差を無くしたいのであれば、
Decimal型や、(VB6の)Currency型を使うようにしてください。
# もちろん、各データ型の有効桁数の制限による格納誤差は、
# 別途考慮する必要がありますけれども。
早速のご回答ありがとうございました。
職場での開発環境は、VB5とVB6が入り交じってます
(よくないと思いますが・・・)ので、
型を再度チェックしてみます。
ありがとうございました。
ツイート | ![]() |