Excel 中的舍入函数、工作表函数与 VBA
我有一个应用程序,用于返回与一大群值中的某些值最接近的匹配项(如我之前的问题< /a>),我选择了 VBA 解决方案。 在使用该应用程序的过程中,我观察到 0.5 值的结果不正确。 我一直在使用 VBA Round 函数,发现 0.5 舍入为整数时返回 0,而工作表舍入函数返回 1。奇怪的是,VBA round 函数返回 2 表示 1.5。 我必须用工作表函数代替 VBA 函数。
我错过了什么吗?
I had an application for returning closest matches to certain values in a large cluster of values( as in my earlier question) and I chose a VBA solution. While in the course of using the said application, I observed that the results for the value of 0.5 were not correct. I had been using the VBA Round function which I found to be returning 0 for 0.5 rounded to integer whereas the worksheet round function returns 1. Strangely, the VBA round function returns 2 for 1.5. I had to substitute the worksheet function in place of the VBA one.
Am I missing something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是一个已知问题。 VBA Round() 函数使用银行家舍入,而电子表格单元格函数使用算术舍入。 请在此处查看详细信息:
PRB:VBA 6 和 Excel 电子表格中的舍入函数不同
提出的解决方法微软正在编写一个自定义函数来获得想要的结果。
银行家四舍五入总是将 0.5 舍入到最接近的偶数,并且是会计中的标准,这就是 Excel 如此工作的原因。 算术舍入将 0.5 向上舍入到下一个数字。
It's a known issue. The VBA Round() function uses Banker's rounding while the spreadsheet cell function uses arithmetic rounding. Check the details here:
PRB: Round Function different in VBA 6 and Excel Spreadsheet
The workaround proposed by Microsoft is to write a custom function to get the desired results.
Banker's rounding always rounds 0.5 to the nearest even number and is standard in accounting, which is why Excel works that way. Arithmetic rounding rounds 0.5 up to the next number.