我在VBA中有这个模糊的舍入问题.
a = 61048.4599674847
b = 154553063.208822
c = a + b
debug.print c
Result:
154614111.66879
Run Code Online (Sandbox Code Playgroud)
这是一个问题,为什么VBA取代了变量c?我没有发出任何舍入功能.我期待的价值是154614111.6687894847.即使我将变量c舍入或格式化为15位小数,我仍然没有达到预期的结果.
任何解释将不胜感激.
编辑:
使用cDec获得了预期的结果.我在Jonathan Allen的回复中已经读过这个为什么CLng会产生不同的结果?
以下是测试结果:
a = cDec(61048.4599674847)
b = cDec(154553063.208822)
c = a + b
?c
154614111.6687894847
Run Code Online (Sandbox Code Playgroud)
chr*_*sen 11
原因是可以存储在浮点变量中的有限精度.
有关完整的解释,请阅读1991年3月出版的计算机调查中发表的David Goldberg撰写的论文"每个计算机科学家应该知道的关于浮点算术的内容".
在VBA中,默认浮点类型是DoubleIEEE 64位(8字节)浮点数.
还有另一种类型可用:Decimal它是一个96位(12字节)有符号整数,由10的可变幂进行缩放.
简而言之,这提供了浮点数到28位数的精确度.
要在您的示例中使用:
a = CDec(61048.4599674847)
b = CDec(154553063.208822)
c = a + b
debug.print c
Result:
154614111.6687894847
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3605 次 |
| 最近记录: |