• ベストアンサー
  • 暇なときにでも

通貨型 Or 10進型?

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

noname#420
noname#420

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数3323
  • ありがとう数12

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

関連するQ&A

  • オラクルのデータ型・通貨について

    オラクル超初心者です。 SQLでは通貨型(CURRENCY)がありますが、オラクルにも同等の定義であるデータ型があるのでしょうか? ネットで調べて見ましたが、上手いことかゆいところに手が届きません。 本当に初歩的な質問ですいませんが、教えて下さい。

  • Accessの通貨

    いつもお世話になっています。 Accessの通貨型について疑問があるので、どなたか教えてください! 通貨型にすると何かしら計算させたときに自動的に四捨五入になりますよね? 通貨型を使用して計算させると、電卓で計算させたときと金額が1円とか2円とか合わないことがあるんです。 これの対処法ってないんですか???

  • 倍率の計算式が分かりません

    こんな時の計算方式は、どのようになるのかどなたか教えて下さい。 例-ギャンブル系 今、76000円使っているとします(すでに負けている金額です) 次に賭けるところは、倍率5倍のAとBの2箇所に最小限で同額を賭けたいと思います。 最小限というのは、AとBのどちらかが当たった時に今までの負け金額(76000円)と今回賭けるAとBへの賭け金額をも含めて結果プラスマイナス0にしたいのです。 こんな時の計算方法、計算式が分かりません。 どなたかご存知の方がいましたら、どうか宜しくお願いします。

その他の回答 (3)

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

 極端な例ですが、以下の様なコードを実行してみて下さい。 -----ここから 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の値の違いを出してみれば解ると思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 浮動小数点数の誤差範囲を教えてください

    猿より若干頭がいい、冴えないプログラマです。 面積を計算する際は必ず誤差がないように、doubleを使わずcurrencyを使っています。 メートルなら小数点4桁で足りますが、キロメートルとなると通貨型の4桁数では足りません。 doubleを使っても、平方キロを平方センチに変換して集計しても誤差は出ないでしょうか。 実際浮動小数点数はどの程度の誤差を生むのでしょうか。猿でも分かる程度教えてください。 基礎過ぎて動物園に帰れのような批判は勘弁してください。。。

  • accessのデータ型について

    ACCESSのテキストでデータ型に「通貨型」というがあるのですが、 その説明が「数値のまるめによる誤差がない」とあります。 どういう意味なんでしょうか?数値って丸められるんですか? さっぱり意味がわかりません。 ご存知のかた教えていただけますでしょうか

  • INT型は金額の型に使用するべきでない?

    金額を格納する属性のデータ型をINT型(UNSIGNED)にして設計していましたが、MySQLのマニュアルを見ると、金額の型にはDECIMALを使用すべきとあります。なぜINT型ではいけないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 暗号通貨の損益計算について教えて下さい

    暗号通貨の損益計算について教えて下さい。 2017年にAの通貨を取得単価110円で3818枚、金額419,980円で買いました。 そして年が変わり、2018年にビットコインを売り500万円の利益を得ます。そしてAの通貨を追加購入し平均取得単価185円、枚数は13,388増やして合計17, 206枚、金額3,178,580円。 その後暴落しAの単価が10円になり合計172,060円になったとします。2018年内にAを売ったときはどのような損益計算になるでしょうか?

  • 生活資金はどれほど必要ですか?

    必要最小限あれば良いと思っていますが、具体的な金額が見えてきません・・・ 必要最小限の金額とはいくらですか ? 1.月収20万円くらい 2.月収30万円くらい 3.月収50万円くらい・・・ 4.それ以上・・・・・・・・ 綺麗事だけは誰でも言えますが・・・ 必要最小限の定義って難しいですね? 実際の所、どうなのでしょうか?

  • VB2008での表示可能桁数について

    VB2008EEで16進数と10進数の相互変換を行おうと思い、とりあえず下記のようなコードを書いたのですが、 ---------- Dim HOGE As Decimal HOGE = 16 ^ 16 MsgBox(HOGE) ---------- 出力の結果が「18446744073709600000」となります。 しかし、電卓で「16^16」を計算すると、 「18446744073709551616」となります。  VBでの16^16の結果=18446744073709600000  電卓での16^16の結果=18446744073709551616 ちなみに「16^15」までの結果はVBでも電卓でも同じでした。 「16^16」以上の結果は全て同じようにある程度の桁数で繰り上げされてしまっているようです。 ちなみに、データ型「Decimal」は「+/-79,228,162,514,264,337,593,543,950,335」まで 表示可能らしいので、特に桁不足という問題は無いはずだと思っています。 これの理由と、対応策のわかる方はいらっしゃいますでしょうか? ちなみに、最終的に「16^20」くらいまで計算したいと考えています。 よろしくお願いいたします。

  • 型「double」「decimal」「float」について教えて下さい

    型「double」「decimal」「float」について教えて下さい。 VB2010とSQL Server 2008 R2 で開発を行っている初心者です。 単価が銭単位(例えば0.01円=1銭)の商品の金額計算を するとき、最初に変数を「Double」を使って、最後に小数点以下 のまるめ処理を行っていたところおかしな金額計算されてしまい ました。 具体的には、 Dim intSuryo As Integer Dim dblTanka As Double Dim dblKingaku As Double Dim marumeKingaku As Double If tbSuryoArray(i).Text <> Nothing Then If tbTankaArray(i).Text <> Nothing Then dblKingaku = 0 dblKingaku = intSuryo * dblTanka Select Case intMarumeKubun Case 1 : marumeKingaku = Math.Truncate(dblKingaku) '切り捨て Case 2 : marumeKingaku = Math.Round(dblKingaku, 0, MidpointRounding.AwayFromZero) '四捨五入 Case 3 : marumeKingaku = Math.Ceiling(dblKingaku) '切り上げ End Select のコードを書いて計算すると、(単価)4.31×(数量)5000 の計算が、 本来「21550」にならなければいけないのに「21549」になってしまいます。 いろいろ調べてみた結果、変数の型を「Double」にするのがいけなくて、 「Decimal」にすると誤差がなくなるということで、変数をすべて「Decimal」 に直したところ、誤差の現象がでなくなったので問題は解決しました。 問題がもうひとつおきました。 データベースの単価の型も変える必要があるかと思い、 SQL Server内のテーブルの単価のカラムを「float」から「decimal(18,0)」に 変えたところ、既に格納されている値がすべて整数に変わってしまいました。 何やらわけがわからず戸惑っていますが、同じ「Decimal」でもVBとSQL Server では利用方法が異なるのでしょうか? またVBでの「Double」と「Decimal」の使い分け、 SQL Serverでの「float」と「decimal」の使い分け、 について教えて下さい。 よろしくお願いします。

  • Access ¥マークを表示しない

    データ型を通貨型にし、書式も通貨型にしたとき、フォームで¥マークを表示しないようにできないでしょうか? (数値型にすると「小数点以下の表示桁数」を0にしても金額に小数点以下が表示されます)

  • エクセル2007 セルに通貨入力について

    何時もサイトで勉強させてもらってます。 タイトル通りエクセル2007のセルにセルの書式設定で分類>通貨にして 小数点以下の桁数>2とし、15000と入力すると150.00と表示されます。 金額計算表を作成したいのですが、15.000にする方法を教えてください。

  • レバレッジを通貨ごとに設定したい

    フォーランド フォレックス株式会社でFXの取引を始めました。 私はレバレッジは自分で数値を入力して設定するのだと思っていたのですが、そうではなく以下のような計算になることが分かりました。 現在の総取引金額 (例:360万円) ÷ 有効残高 (例:50万円) = 現在のレバレッジ (例:7.2倍) このことから複数の通貨を持っていても個別にレバレッジを設定できないのですが、他のFX業者はどうなんでしょうか?普通はできることなのでしょうか?