我有一个迭代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
有人能看到解决方法吗?有什么方法可以使双精度更加精确甚至是不同的数据类型?感谢。
答案 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)。