
今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
No.3ベストアンサー
- 回答日時:
No.1さんもご指摘の通り、通貨型の計算精度は小数点以下4桁までしか保証されません。
「通貨型」の名の通り、金額の実務計算を目的としているからです。
# 数値のとき、奇数方向に丸められる原因はわかりませんが。
プログラムの利用目的がわかりませんが、科学計算や統計処理など、高精度が要求されるなら、Decimal (10進) 型を使用すべきでしょう。
(整数部分が大きくなく、小数部分で要求される桁数が変動しないのであれば、通貨型で、10000倍して計算した結果を1/10000にする、といった小細工で解決できるかもしれません)
Decimalでも要求を満たせない場合は、C言語等で演算ライブラリを作成する必要があるものと思われます。
ご回答ありがとうございます。
小数点以下4桁まで有効で5桁目は【丸め】か四捨五入が行われるものと思っていましたが、予想外の結果が返ってしまいました。
有効数字を小数点以下4桁までとしてしまったので、改めまして小数点以下3桁までを有効数字とすることにして対処しようと考えます。
No.2
- 回答日時:
「銀行丸め」や「銀行型丸め」と呼ばれる丸め方です。
googleで検索すれば解説も出てくると思います。
この回答への補足
ありがとうございます。
引値を文字列で指定した際の動きは「銀行丸め」でわかるのですが、
引値を数値型に指定した際の動きがわかりません。
おわかりになりますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
モジュロ
-
変化させるセルが変化しない
-
モジュラス103の計算とは何でし...
-
相性占いのソース
-
ファミリーベーシックのPOKE&H...
-
Java 電卓の連続計算
-
PHPとJavaでSHA256の結果を同じ...
-
65536は2の何乗なのでしょうか?
-
C# 計算処理中に実行中ウィン...
-
引き放し法による除算アルゴリ...
-
なぜオーバーフローになるので...
-
CとFORTRANの計算速度はどちら...
-
matlabでの長時間の計算について
-
EXCELなどで「返す」という表現
-
40桁の
-
VBAで関数をつくる
-
CCurの引値を文字列にする時と...
-
VBAの再計算が反映されない件に...
-
時間(ミリ秒を含む)の引き算
-
ExcelのマクロVBA動作を軽くす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
変化させるセルが変化しない
-
EXCELなどで「返す」という表現
-
VBAの再計算が反映されない件に...
-
VBAで関数をつくる
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
モジュラス103の計算とは何でし...
-
引き放し法による除算アルゴリ...
-
バッチファイルでウインドウを...
-
スレッド処理からダイアログを...
-
数値計算の高速化 (cos, sin, exp)
-
エクセルで特定のセルのみを任...
-
モジュロ
-
関数を使わないで日付の計算を...
-
階乗のマクロ
-
時間(ミリ秒を含む)の引き算
-
なぜオーバーフローになるので...
-
論理演算子.NOT.の使い方
-
PHPとJavaでSHA256の結果を同じ...
おすすめ情報