VBA舍入问题

Gre*_*koz 6 excel vba

我在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)