在VBA中键入Double rounding error

时间:2016-06-09 09:14:40

标签: excel excel-vba macros double rounding vba

我有一个迭代5次的宏,并使用double在每个循环中存储一个值。问题是double没有将值存储到足够的小数位:

  

65,314 - 6683.25533205254 = 58,630.7446694746

这是我需要的那种准确性,但双重只是将答案存储为58,630.7447,因此每次迭代都会失去准确性。这是代码:

    Dim eg As Double

i = 2

Do Until i = lngRow + 1
    If Cells(i, coltemp) < 0 Then
        eg = Cells(i, coltemp2) + Cells(i, col3)
        Cells(i, col4) = eg
    Else
        Cells(i, col4) = Cells(i, coltemp2)
    End If
    i = i + 1
Loop

有人能看到解决方法吗?有什么方法可以使双精度更加精确甚至是不同的数据类型?感谢。

2 个答案:

答案 0 :(得分:2)

我怀疑你的单元格被格式化为货币,这可以解释4DP精度。使用Value2属性:

Do Until i = lngRow + 1
    If Cells(i, coltemp).Value2 < 0 Then
        eg = Cells(i, coltemp2).Value2 + Cells(i, col3).Value2
        Cells(i, col4).Value2 = eg
    Else
        Cells(i, col4).Value2 = Cells(i, coltemp2).Value2
    End If
    i = i + 1
Loop

答案 1 :(得分:0)

请在此处查看my answer,特别是后半部分。

简答:使用Decimal数据类型。

  

保持有符号的128位(16字节)值,表示96位(12字节)   由10的可变幂缩放的整数。缩放因子   指定小数点右边的位数;它   范围从0到28.如果比例为0(无小数位),则为   最大可能值为+/- 79,228,162,514,264,337,593,543,950,335   (+/- 7.9228162514264337593543950335E + 28)。有小数点后28位,   最大值为+/- 7.9228162514264337593543950335,最小值   非零值为+/- 0.0000000000000000000000000001(+/- 1E-28)。