出産前後の痔にはご注意!

今VB6.0SP5を用いてPGを作成しているのですが、

【CCur】関数を用いて少数点の計算を行っていますが予想外の動きに戸惑っております

CCurの引値に数値を指定したときと文字列をしてしたときの返値が異なるのですがどういうことなのでしょうか?

数値型 引値
0.0001※0.00005
0.0001※0.00015
0.0003※0.00025
0.0003※0.00035
0.0004※0.00045
0.0006※0.00055
0.0006※0.00065
0.0008※0.00075
0.0008※0.00085
0.0009※0.00095

文字列型      引値
0※0.00005
0.0002※0.00015
0.0002※0.00025
0.0004※0.00035
0.0004※0.00045
0.0006※0.00055
0.0006※0.00065
0.0008※0.00075
0.0008※0.00085
0.001※0.00095

ヘルプ等でも調べたのですが、引値は「オブジェクト」となっていて数値でも文字列でも構わない風なのですが返値が異なるので困っております。
文字列を指定した時は【丸め】が行われているは確認できたのですが、数値型の規則性がわかりません。

その辺りの情報をご教授お願いします。

環境
OS:Win2000 SP4
WinNT SP5

VB6.0 SP5

このQ&Aに関連する最新のQ&A

A 回答 (3件)

No.1さんもご指摘の通り、通貨型の計算精度は小数点以下4桁までしか保証されません。


「通貨型」の名の通り、金額の実務計算を目的としているからです。

# 数値のとき、奇数方向に丸められる原因はわかりませんが。

プログラムの利用目的がわかりませんが、科学計算や統計処理など、高精度が要求されるなら、Decimal (10進) 型を使用すべきでしょう。
(整数部分が大きくなく、小数部分で要求される桁数が変動しないのであれば、通貨型で、10000倍して計算した結果を1/10000にする、といった小細工で解決できるかもしれません)

Decimalでも要求を満たせない場合は、C言語等で演算ライブラリを作成する必要があるものと思われます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

小数点以下4桁まで有効で5桁目は【丸め】か四捨五入が行われるものと思っていましたが、予想外の結果が返ってしまいました。

有効数字を小数点以下4桁までとしてしまったので、改めまして小数点以下3桁までを有効数字とすることにして対処しようと考えます。

お礼日時:2003/11/07 16:18

「銀行丸め」や「銀行型丸め」と呼ばれる丸め方です。



googleで検索すれば解説も出てくると思います。

この回答への補足

ありがとうございます。

引値を文字列で指定した際の動きは「銀行丸め」でわかるのですが、
引値を数値型に指定した際の動きがわかりません。

おわかりになりますでしょうか?

補足日時:2003/11/07 14:43
    • good
    • 0

Currency型は小数部4桁までだから

    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング