• ベストアンサー

通貨型 Or 10進型?

VB6で事務計算(金額計算)を行う場合、誤差を 最小限に抑えられるデータ型は通貨型(Currency) なのでしょうか、それとも10進型(Decimal)なの でしょうか? 一般的にはどちらを使われているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.2

 一般には、どのような型を使おうとも、誤差は出ません。  誤差が出たりしたらマイクロソフトがひっくり返ってしまいますからね(笑) ですから、好きな方でいいです(笑)  通貨型と10進型の違いは、取り扱える値の大きさの違いです。10進型は通貨型に比べて大きな値が扱えます。  詳しくはVBのヘルプ「データ型の概要」をご参照のこと。

noname#420
質問者

お礼

回答有難うございます。 取り扱える値の大きさが違うだけで基本的には 誤差がないということですので安心しました。

noname#420
質問者

補足

VBのヘルプをまた何度か読み返していて疑問に思ったのですが、「/ 演算子」のヘルプに「/ 演算子」を使用した場合、一般に結果を浮動小数点数で返しますとあります. 例外で10 進型 (Decimal) と他のデータ型を含む除算の 場合、10進型で返すとあります。 ヘルプを見る限り、通貨型の除算の場合は浮動小数点 数で返され「通貨型の一時変数に代入することにより、期待する結果を得ることができます。」とVB4のヘルプ(文書番号: J029974)にはあります。 「/ 演算子」を使用する場合に、誤差を抑制できるデータ型は通貨型を使用するよりも10進型を使用した方がよいのでしょうか? 結局は、どちらの型を使用してもヘルプの対処方法 をとれば、どちらでもよいのでしょうか? どなたかご存知ありませんか?

その他の回答 (3)

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.4

 極端な例ですが、以下の様なコードを実行してみて下さい。 -----ここから Dim c As Currency Dim cA As Currency Dim i As Integer Dim iA As Integer ' c = 10 / 3 i = 10 / 3 ' cA = c * 3 iA = i * 3 -----ここまで  実行後、cAとiAの値の違いを出してみれば解ると思います。

noname#420
質問者

お礼

わざわざ例をあげて下さり有難うございます。 この例をDecimalでも試してみたのですが、 確かにどの固定小数点数を使用しても、 誤差は発生しますね。 単に10進数と2進数の関係の誤差ではなく、 10進数のみでの循環小数の例なのですね。 これは、計算方法に注意しなければいけない と改めて思いました。

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.3

金額計算にはその名の通り「通過型(Currency)」を使用して下さい。 誤差を最小限に抑えるという問題ではなく、誤差は発生しません。 誤差が発生するのは、浮動小数点型です(Single, Double)。従って、これらは金額計算には絶対に使用してはいけません。

noname#420
質問者

お礼

回答有難うございます。 やはり金額計算に浮動小数点数を使用するのは 良くないのですね。 うすうすと浮動小数点数を金額計算に使用しては 良くないのではと感じてはいたのですが、確認できて 良かったです。

  • showcase
  • ベストアンサー率33% (1/3)
回答No.1

アプリケーション開発で金額計算を行う場合、私の場合、通貨型(Currency)を使用します。ヘルプを見ても、「金額に関連する計算に役立つデータ型です」と言ってますしね。参考になれば幸いです。

noname#420
質問者

お礼

たしかにヘルプをみると通貨型には 「金額に関連する計算に役立つデータ型です」 や「特に正確さが重要な金額を含む計算および 固定小数点数演算を行います」等の記述がありますね。 10 進型の変数の保存形式には「10 進型の変数は符号付き整数として保存されます。」という記述ぐらいしか 金額計算のデータ型選択の手がかりが無く不安でした。 回答有難うございました。