小数点の計算結果について

解決


sarushi  2006-05-16 22:21:21  No: 95426

仕事で使うプログラムを作成しております。
次の計算で、zの値が"0.001"となって欲しいのですが、
"9.999999E-04"となってしまいます。
対策方法を教えて頂けないでしょうか?
よろしくお願いします

Dim x As Single, y As Single, z As Single
x = 5
y = 0.0002
z = x * y


nyangetsu  2006-05-16 23:41:26  No: 95427

対策1

z=round(x*y,3)

のようにround関数を使って四捨五入すれば良いと思います。
この例では第二引数の値は3としていますが,必要な精度に合わせた値にしてください。

対策2
zを文字列として出力するのならば,出力時に

dim str as String
str=Format(z,"###0.000")

のようにFormat関数を使って四捨五入する手もあります。


魔界の仮面弁士  2006-05-16 23:44:02  No: 95428

Single型やDouble型とは、そういうものです。
これは浮動小数点型が、数値を「2進数」で管理しているためです。

10進数表現では、「10÷3=」の結果が「3.3333…」となり、
有限の桁数では、誤差が生じてしまいますよね。

それと同様、2進数表現では、「1÷10=」などを正しく表現できません。
(0.5 や 0.75 などといった数であれば、誤差なく格納できますが)

もし、(10進数で見た場合の)演算誤差を無くしたいのであれば、
Decimal型や、(VB6の)Currency型を使うようにしてください。

# もちろん、各データ型の有効桁数の制限による格納誤差は、
# 別途考慮する必要がありますけれども。


sarushi  2006-05-17 00:09:20  No: 95429

早速のご回答ありがとうございました。

職場での開発環境は、VB5とVB6が入り交じってます
(よくないと思いますが・・・)ので、
型を再度チェックしてみます。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加