VB有没有精度比双精度(Double)更高的数值型数据
有的,首先Currency(货币型)是定点数(又叫变比整型数),占用8个字节(与Double一样),数值范围从-922,337,203,685,477.5808 到 922,337,203,685,477.5807,比Double的15位有效数字的精度要高。请注意,它的小数位是固定4位的哦,这就是它叫定点数的原因(而Double是浮点数,即小数点的位置是浮动的、变化的)。
此外,VB还有一种隐藏的数据类型Decimal,占用14个字节,这是个特殊的变比数,数值范围是 +/-79,228,162,514,264,337,593,543,950,335,如果含有小数,则小数点右边最多可以有28位数:+/-7.9228162514264337593543950335,最小的非零值为+/-0.0000000000000000000000000001
之所以Decimal是隐藏的,是因为它的运行效率很低,在执行大量运算时会严重影响程序速度,所以VB不推荐使用它。因此,要想在自己的程序中使用Decimal,必须经过特殊的处理:首先要把变量声明为Variant型,然后用CDec函数把数值进行转换后赋值给变量,这个变量就会自动变为Decimal型了。要注意的是,如果原数值的有效位数超过15位(也就是Duble型的最高精度),要先把这个数值存放到一个字符串变量中,然后再用CDec函数转换后赋值给Variant型变量,听起来够复杂吧?下面是个例子:
Private Sub Form_Click() '点击窗体运行
Dim d As Variant, s As String
s = "12345678901234567890"'这个数如果用Duble显示会变成1.23456789012346E+19
d = CDec(s)
Print d '现在显示的则是12345678901234567890
Print d + 10000 '可以直接参与运算的,运算结果的精度也是超过Duble的
End Sub
答案是有的,它就是
Decimal 数据类型
MSDN 参考:
Decimal 变量存储为 96 位(12
个字节)无符号的整型形式,并除以一个 10 的幂数。这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为
0(没有小数位)的情形下,最大的可能值为 ±79,228,162,514,264,337,593,543,950,335。而在有 28
个小数位的情况下,最大值为 ±7.9228162514264337593543950335,而最小的非零值为 ±0.0000000000000000000000000001。
注意:此时,Decimal 数据类型只能在 Variant 中使用,也就是说,不能声明一变量为 Decimal
的类型。不过可用 CDec 函数,创建一个子类型为 Decimal 的 Variant。
如何声明 Decimal 数据类型?
' 先定义 Variant 类型.
Dim decNum As Variant
' 使用 CDec 函数转换成 Decimal 数据类型
decNum = CDec(decNum)