10 進型 (Decimal) (Visual Basic)
更新 : 2007 年 11 月
96 ビット (12 バイト) の整数に 10 の累乗 (可変) をスケーリングした値を表す 128 ビット (16 バイト) の符号付きの値を保持します。スケール ファクタには、小数点の右側の桁数を 0 ~ 28 の範囲で指定します。スケール ファクタが 0 (小数点なし) であれば、最大値は +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28) になります。小数点以下 28 桁の数値の場合、最大値は +/-7.9228162514264337593543950335 で、ゼロを除く最小値は +/-0.0000000000000000000000000001 (+/-1E-28) です。
解説
Decimal 型では、桁数が非常に大きい数値を扱うことができます。有効桁数は最大 29 で、7.9228 x 10^28 を超える値を表現できます。特に、多くの桁数を必要とし、丸め誤差が許容されない財務計算などに適しています。
Decimal の既定値は 0 です。
プログラミングのヒント
**精度。**Decimal は浮動小数点型のデータ型ではありません。Decimal 構造体には、バイナリ整数値と共に符号ビット、および値のどの部分が小数かを指定するスケール ファクタが整数で格納されます。このため、Decimal では、メモリ内で浮動小数点型 (Single および Double) よりも正確に数値を表現できます。
**パフォーマンス。**Decimal は、すべての数値型の中で最もパフォーマンスの低いデータ型です。データ型を選択する前に、精度の重要性とパフォーマンスとを比較検討する必要があります。
**拡大変換。**Decimal データ型は Single または Double に拡大変換されます。これは、System.OverflowException エラーを発生させることなく、これらの型のいずれかに Decimal を変換できることを意味します。
後続のゼロ Visual Basic では、Decimal のリテラルに後続ゼロが格納されません。ただし、Decimal 型の変数は、計算に必要なすべての後続ゼロを保持します。次に例を示します。
Dim d1, d2, d3, d4 As Decimal d1 = 2.375D d2 = 1.625D d3 = d1 + d2 d4 = 4.000D MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) _ & ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))
この例で、MsgBox の出力は次のようになります。
d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
型文字 あるリテラルに型文字 D を付けると、そのリテラルは整数型 (Decimal) に変換されます。ある識別子に識別子の型文字 @ を付けると、その識別子は整数型 (Decimal) に変換されます。
Framework の型 .NET Framework において対応する型は、System.Decimal 構造体です。
範囲
D の型文字を使用して、Decimal 型の変数または定数に大きな値を代入することが必要になる場合があります。次に例を示します。
Dim bigDec1 As Decimal = 9223372036854775807 ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808 ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D ' No overflow.
リテラルの後に型文字を指定しなければ、コンパイラはリテラルを Long 型と解釈します。bigDec1 の宣言では、値が Long 型の範囲内にあるため、オーバーフローが発生しません。しかし、bigDec2 の値は Long 型には大きすぎるため、コンパイル エラーが発生します。bigDec3 では、リテラルの型文字 D を指定して、コンパイラにリテラルを Decimal と解釈させているため、エラーが発生しません。
参照
概念
参照
単精度浮動小数点型 (Single) (Visual Basic)