VBの関数”Int()”、”Fix()”関数に関する質問です。
以下のようなケースの場合、計算結果がまるめられてしまいます。
なぜでしょうか?ご教示願います。
+++++++++++++++++++++++++++++++++++++++++++
Dim curM As Currency
Dim curU1 As Currency
Dim dblOrg As Double
curOrg = 10.6
curU1 = 10
curM = Fix(dblOrg * curU1)
+++++++++++++++++++++++++++++++++++++++++++
curM の値→105(※106を期待)
+++++++++++++++++++++++++++++++++++++++++++
> curOrg = 10.6
curOrgという変数は、定義されていないようですが…。(^_^;)
>なぜでしょうか?
バグではありません。浮動小数点の仕様です。
SingleやDoubleといった「浮動小数点」というのは、データを2進数で扱います。
10進数の"0.5" であれば、2進数では "0.1" という割り切れる値になりますが、
10進数の"0.6" の場合は、2進数では "0.10011001100110011……"という終わりの無い小数になります。
しかし、精度桁数には限りがあるため、ある程度の近い値にまとめられ、
結果的には、10進数の 0.59999999999…… という値で格納される事になります。
こちらを参考にしてみてください。
http://www.python.jp/pub/doc_jp/tut_2.2.3/node14.html
http://homepage3.nifty.com/salv/hp-old/03pc/qvb/03vbpg005.htm
魔界の仮面弁士 様
返信が遅れてしまい誠に申し訳ございません。
ご回答ありがとうございました。
分かりやすいご説明で理解できました。
解決のチェックを入れ忘れていました…。(^_^;)
ツイート | ![]() |