Int()、Fix()関数のバグ?

解決


サダヲ  2003-12-25 06:00:08  No: 81129

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を期待)
+++++++++++++++++++++++++++++++++++++++++++


魔界の仮面弁士  2003-12-25 08:57:58  No: 81130

>    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


サダヲ  2004-01-06 06:27:13  No: 81131

魔界の仮面弁士 様
返信が遅れてしまい誠に申し訳ございません。

ご回答ありがとうございました。
分かりやすいご説明で理解できました。


サダヲ  2004-01-06 06:28:30  No: 81132

解決のチェックを入れ忘れていました…。(^_^;)


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

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






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