Decimal 数据类型 (Visual Basic)
更新:2007 年 11 月
存储 128 位(16 字节)的有符号值,它表示按 10 的可变幂变大或变小的 96 位(12 字节)整数。此比例因子指定小数点右边的数位,范围从 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 数据类型是所有 Numeric 类型中最慢的一种类型。在选择数据类型之前,应权衡精度和性能之间的重要性。
**扩大。**Decimal 数据类型扩大至 Single 或 Double。这意味着您可以将 Decimal 转换为这些类型中的任何类型,而不会遇到 System.OverflowException 错误。
尾随零。 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 来说太大,所以编译器将生成错误。文本类型字符 D 强制编译器将文本解释为 Decimal,从而解决 bigDec3 的问题。