Excel中的圆angular函数,工作表函数与VBA

我有一个应用程序返回最接近的匹配值在一大群值的特定值(如我在前面的问题 ),我select了一个VBA解决scheme。 在使用上述申请的过程中,我观察到0.5的结果是不正确的。 我一直在使用VBA回合函数,我发现返回0为0.5舍入为整数,而工作表回合函数返回1.奇怪的是,VBA回合函数返回2为1.5。 我不得不用工作表函数代替VBA。

我错过了什么吗?

这是一个已知的问题。 VBA Round()函数使用Banker舍入,而电子表格单元格函数使用算术舍入。 在这里检查细节:

在VBA 6和Excel电子表格中,PRB:Round函数不同

Microsoft提出的解决方法是编写一个自定义函数来获得所需的结果。

银行家的四舍五入总是舍入 0.5到最接近的偶数,并且在会计上是标准的,这就是Excel以这种方式工作的原因。 算术四舍五入到下一个数字。

你可以责怪微软这一个: http : //support.microsoft.com/kb/194983

以下是一些方法列表: http : //www.excelforum.com/excel-programming/401104-worksheet-rounding-vs-vba-rounding.html

在这里完全回答的问题, 在这里复制(作者的许可:):

要小心,VBA Round函数使用Banker的四舍五入,在0.5到偶数的位置,如下所示:

Round (12.55, 1) would return 12.6 (rounds up) Round (12.65, 1) would return 12.6 (rounds down) Round (12.75, 1) would return 12.8 (rounds up) 

而Excel工作表函数轮,总是四舍五入。

我已经做了一些testing,它看起来像.5舍入(对称舍入)也用于单元格格式,也用于列宽舍入(当使用通用数字格式时)。 “显示的精确度”标志本身并不会做任何舍入,只是使用单元格格式的舍入结果。

我尝试从VBA中的微软实现SymArith函数为我的四舍五入,但发现修正有一个错误,当您尝试给它一个数字,如58.55; 58.5而不是58.6的结果。 然后,我终于发现,你可以使用Excel Worksheet Roundfunction,如下所示:

Application.Round(58.55,1)

这将允许您在VBA中进行正常舍入,尽pipe它可能不如某些自定义函数那么快。 我意识到这个问题已经到了完整的一步,但是为了完整起见,我想把它包括进来。