- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6のFIX関数での誤差について)
VB6のFIX関数での誤差について
このQ&Aのポイント
- VB6のFIX関数を使用すると、DOUBLE型の数値または数式を入れる構文となっていますが、明示的な変換を行っていない場合に誤差が発生することがあります。
- マイクロソフトのサポートはVB6について終了しているため、問題解決には困難があるかもしれません。
- 同じFIX関数をVS2005で試した場合には正確な値が表示されることがあります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
0.15 のデータ型はなんですか? 下記プログラムでは正しい値が出ますよ。 Dim a As Currency Dim b As Currency Dim c As Currency Dim d As Double a = 7520 b = 0.15 d = 0.15 c = Fix(a * b) MsgBox CStr(c) c = Fix(a * d) MsgBox CStr(c)
その他の回答 (1)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
回答No.1
コンピュータの中では数値を2進数で扱うので、整数には大きさの制限があり、実数にはそれに加えて小数で表現する桁数の限界があります。 これはコンピュータで数値計算をする場合に注意しなければならない事柄です。 この場合も、7502*0.15の結果が例えば1127.999999998とかになっているのです。 人間ならば答えは1128だなと「察する」ことが出来ますが、コンピュータは律儀に1127を返します。 回避策としては、 ・小数点4桁目あたりで四捨五入してからFIX()する。 ・計算に使用する数値をdouboe型ではなく通貨型にする。 のいずれかでどうでしょう?
質問者
補足
ありがとうございました。 回避策の2番目ですが、 Dim a As Currency a = 7520 Fix(a * 0.15) としても「1127」とやはり表示されます。 また、同じパソコン・OSなのにVB6ではだめで VS2005ならOKなのかが理解できません。
お礼
0.15がdoubleとなっていました。 参考にさせていただきます。