- ベストアンサー
CCurの引値を文字列にする時と数値にするときの違い?!
今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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
No.1さんもご指摘の通り、通貨型の計算精度は小数点以下4桁までしか保証されません。 「通貨型」の名の通り、金額の実務計算を目的としているからです。 # 数値のとき、奇数方向に丸められる原因はわかりませんが。 プログラムの利用目的がわかりませんが、科学計算や統計処理など、高精度が要求されるなら、Decimal (10進) 型を使用すべきでしょう。 (整数部分が大きくなく、小数部分で要求される桁数が変動しないのであれば、通貨型で、10000倍して計算した結果を1/10000にする、といった小細工で解決できるかもしれません) Decimalでも要求を満たせない場合は、C言語等で演算ライブラリを作成する必要があるものと思われます。
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
「銀行丸め」や「銀行型丸め」と呼ばれる丸め方です。 googleで検索すれば解説も出てくると思います。
補足
ありがとうございます。 引値を文字列で指定した際の動きは「銀行丸め」でわかるのですが、 引値を数値型に指定した際の動きがわかりません。 おわかりになりますでしょうか?
- todo36
- ベストアンサー率58% (728/1234)
Currency型は小数部4桁までだから
お礼
ご回答ありがとうございます。 小数点以下4桁まで有効で5桁目は【丸め】か四捨五入が行われるものと思っていましたが、予想外の結果が返ってしまいました。 有効数字を小数点以下4桁までとしてしまったので、改めまして小数点以下3桁までを有効数字とすることにして対処しようと考えます。