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

回到顶部