VBA司
似乎是不可思议,这是不是已经有一个答案的问题的重复,但我无法找到问题或答案所以在这里我去...VBA司
在VBA,在即时窗口,如果我输入:
?8/7
我得到的结果是: 1.14285714285714
这要是我再乘以7
给我一个数字,比8略显不足,即7.99999999999998
。 我的袖珍计算器提供更多小数位,所以它比VBA更好?对? ;-)
但是,如果我添加0.000000000000003
的结果1.142...
之前,我乘我得到8
(其中,顺便说一句,也是不正确的);但我的问题是:
我怎样才能控制答案的精确度相对于为?8/7
显示的小数位数的号码吗?
我已经看到这个答案与accuracy of floating points有关,但它是一个不同的问题,它解释了不准确的原因,而我有兴趣获得一些额外的数字。
为此我试图写一个返回双重功能,但它不会返回足够的小数位...例如我希望看到:1.142857142857142857
。我还发现引用了一个decimal
数据类型,但我认为这篇文章是针对VB6(而不是VBA)的,因为我已经用尽了VBA中的可用数据类型......我错过了什么?
Function test() As Double Dim a As Double
Dim b As Double
Dim c As Double
a = 8
b = 7
c = a/b
test = c
End Function
回答:
图形和科学计算器不是为了速度而构建的。他们可以使用软件实现十进制浮点数来进行计算,而不是IEEE双打。所以你的袖珍计算器很可能比VBA具有更高的精度,但是需要付出代价。他们所做的事情可能会比一个数量级慢一点。
VBA缺乏内置任意精度浮点库,但其decimal type支持增加了一倍更高的精度。不幸的是,它不是一个完整的数据类型,而是一个Variant
的子类型。要创建它们,你需要使用CDec()
:
Sub test() Dim x As Variant
x = CDec(8)/7
Debug.Print x
End Sub
这显示1.1428571428571428571428571429
使用Decimal
,你需要知道的事实,如果你不小心,就可以弹出回例如一个Double
取决于你如何使用它们:
Sub test2() Dim x As Variant
x = CDec(x)
Debug.Print TypeName(x)
x = 8/7
Debug.Print x
Debug.Print TypeName(x)
End Sub
输出:
Decimal 1.14285714285714
Double
以上是 VBA司 的全部内容, 来源链接: utcz.com/qa/260278.html