【问题标题】:Round function in Excel, worksheet function vs VBAExcel中的圆形函数,工作表函数与VBA
【发布时间】:2010-09-20 22:10:30
【问题描述】:

我有一个应用程序,用于返回与大量值中的某些值最接近的匹配项(如我之前的 question 中所示),我选择了 VBA 解决方案。在使用上述应用程序的过程中,我观察到值 0.5 的结果不正确。我一直在使用 VBA Round 函数,我发现它返回 0 表示 0.5 舍入为整数,而工作表舍入函数返回 1。奇怪的是,VBA 舍入函数返回 2 表示 1.5。我不得不用工作表函数代替 VBA 函数。

我错过了什么吗?

【问题讨论】:

  • 请记住,VBA 函数并非“不正确”;正如 Lance 在链接的 Access 问题中指出的那样,这只是一种不同的舍入方法。我认为,不正确舍入的一个例子是 ColdFusion 6.1,除了非常特殊的情况外,它向上舍入了 0.5。

标签: vba excel excel-2007 worksheet-function


【解决方案1】:

这是一个已知问题。 VBA Round() 函数使用银行家的舍入,而电子表格单元格函数使用算术舍入。在此处查看详细信息:

PRB: Round Function different in VBA 6 and Excel Spreadsheet

微软提出的解决方法是编写一个自定义函数来获得想要的结果。

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

【讨论】:

  • 你的最后一段是倒退的:Excel 使用银行家的四舍五入,所以说这就是“为什么 Excel 以这种方式工作”是没有意义的。如果有的话,它只会加深 Excel 为何从银行家的四舍五入中脱颖而出的谜团。
  • @JohnColeman,最后一段是 Joel Spolsky(上世纪 90 年代担任 Excel 团队的项目经理)添加的,所以我试着解释一下:“因为银行家的四舍五入只适用于会计, Excel 首选算术舍入,具有更广泛的适用性”。希望不要让它变得更糟......
  • 有趣。由于他也是 Stack Overflow 的联合创始人和有史以来最好的编程博客之一的作者,我可以看出你在编辑它时的犹豫,尽管我怀疑他只是说错了。
猜你喜欢
  • 1970-01-01
  • 2012-06-14
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多