• ベストアンサー

通貨型 Or 10進型?

showcaseの回答

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

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

noname#420
質問者

お礼

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

関連するQ&A

  • Currency (通貨型)に関して教えてください

    Currency (通貨型)に関して教えてください。(VB5です) Private Sub Command1_Click() Dim a As Currency a = 222222 For i = 1 To a Next i End Sub 上のコードではFor文が一度も実行されずに終わってしまいます。 Private Sub Command1_Click() Dim a As Currency a = 22222 For i = 1 To a Next i End Sub これだとちゃんとiが22222まで実行されます。 一体どうしてでしょうか。 よろしくお願いします。

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

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

  • Accessの通貨

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

  • variant型にした場合、精度は落ちるのでしょうか?

    スピードや.NETに移行する場合は、currency型のままで良いのはわかりますが、より広い型を扱うようにバリアント型にしました。 同じようにint, long, single, double, currency型のデータをvariant型にして計算した場合の精度について詳しい方、教えてください。 また、COM+でVARIANT型みたいなのがあるようですが、VBのバリアントと同じものなのでしょうか?

  • 型「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」の使い分け、 について教えて下さい。 よろしくお願いします。

  • 最小二乗法における誤差の求め方

    こんばんは。 皆様よろしくお願いいたします。 あるデータにフィットさせる関数の係数を 最小二乗法を用いて、自分でプログラムを作って 見つけようと考えているのですが、 係数の誤差をどのように求めればいいかが わかりません。方法を探しても、直線の 場合はきれいに連立方程式が解けて、 誤差の伝播から計算するべき式が求まりますが、 一般の曲線の場合は解けないと思います。 gnuplotなどでフィッティングするとerrorが 出てきますが、あれはどのようにして 計算しているのでしょうか。 よろしくお願いいたします。

  • 通貨型はバイト型に変換可能?

    構造体に入っている通貨型(Currency)をバイト型に変換したいのですが 思ったように変換されません。 どのように変換すればよいのでしょうか? -------------------- 通貨型を含まない場合 -------------------- Type tpSample nint1 As Integer ' 2バイト nInt2 As Integer ' 2バイト End Type Sub Main() Dim LudtpSample As tpSample Dim LbyteBuff(100) As Byte With LudtpSample .nint1 = 1 .nInt2 = 1 End With ' バイト配列にコピー Call CopyMemory(ByVal VarPtr(LbyteBuff(0)), LudtpSample, Len(LudtpSample)) End Sub [LbyteBuffの中身] LbyteBuff(0) = 1 LbyteBuff(1) = 0 LbyteBuff(2) = 1 LbyteBuff(3) = 0 -------------------- 通貨型を含む場合 -------------------- ' 構造体に通貨型を追加 Type tpSample nint1 As Integer ' 2バイト cCur As Currency ' 8バイト? nInt2 As Integer ' 2バイト End Type Sub Main() Dim LudtpSample As tpSample Dim LbyteBuff(100) As Byte With LudtpSample .nint1 = 1 .cCur = 1 .nInt2 = 1 End With ' バイト配列にコピー Call CopyMemory(ByVal VarPtr(LbyteBuff(0)), LudtpSample, Len(LudtpSample)) End Sub [LbyteBuffの中身] LbyteBuff(0) = 1 LbyteBuff(1) = 0 LbyteBuff(2) = 0 LbyteBuff(3) = 0 LbyteBuff(4) = 16 LbyteBuff(5) = 39 LbyteBuff(6) = 0 LbyteBuff(7) = 0 LbyteBuff(8) = 0 LbyteBuff(9) = 0 LbyteBuff(10) = 0 LbyteBuff(11) = 0 LbyteBuff(12) = 0 LbyteBuff(13) = 0 通貨型を構造体に含めるとバイトがずれていきます。 通貨型はバイト型に変換不可能なのでしょうか? その場合、構造体にLong型を超えるデータを格納したい場合、通貨型(Currency)を使用する以外の方法がありますでしょうか?

  • 仮想通貨

    仮想通貨売買で、例えばある通貨で損をして、他の通貨で得した場合、2つの通貨の損得を計算してその差額がプラスならばその部分の利益を年間の雑収入として、申告すれば良いのでしょうか?

  • C# 巨大な文字列の計算をさせたい

    お世話になります。 C#にて、文字列からなる計算式 string s = "(3270+(5*4))/7"; のようなものを計算して 値を返す処理を作成したいと思っています。 http://dobon.net/vb/dotnet/programing/eval.html ↑上記のサイト様から、DataTable.Computeで 求める方法を参考にしたのですが、戻り値を decimalで受けたいのですが、decimalで取得することができません。 doubleでは取得できますが、decimalでcastしようと すると、InvalidCastExceptionが発生します。 string exp = "(1+6)*5/(7-4)"; //式を計算する System.Data.DataTable dt = new System.Data.DataTable(); decimal result = (decimal)dt.Compute(exp, "");        ↑この行で発生 要は、intやdoubleでは収まらない巨大な桁を持つ文字列の 計算をさせたいのですが、どうすればよいでしょうか。 よろしくお願いいたします。

  • 丸め処理の対策はどうすれば良い?

    VBでプログラムしているのですが 小数点の丸め処理で困っています 対策として よく「Currency型にすれば良い」 というのは 見るのですが Currency型にすると 小数点第4桁までしか あつかえません 小数点第4桁以下 計算の計算も正確に したい場合は どうすれば良いのでしょうか? 宜しくお願いします