Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel中的舍入函数、工作表函数与VBA_Vba_Excel_Excel 2007_Worksheet Function - Fatal编程技术网

Excel中的舍入函数、工作表函数与VBA

Excel中的舍入函数、工作表函数与VBA,vba,excel,excel-2007,worksheet-function,Vba,Excel,Excel 2007,Worksheet Function,我有一个应用程序,用于返回与大型值集群中的某些值最接近的匹配项(如前所述),我选择了VBA解决方案。在使用上述应用程序的过程中,我发现0.5的结果不正确。我一直在使用VBA Round函数,我发现该函数返回0表示0.5四舍五入为整数,而工作表Round函数返回1。奇怪的是,VBA round函数返回2表示1.5。我不得不用工作表函数代替VBA函数 我遗漏了什么吗?这是一个已知的问题。VBA Round()函数使用银行家舍入,而电子表格单元格函数使用算术舍入。请在此处查看详细信息: 微软提出的解

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


我遗漏了什么吗?

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

微软提出的解决方案是编写一个自定义函数来获得所需的结果


银行家四舍五入总是将0.5四舍五入到最接近的偶数,这是会计中的标准值,这就是Excel采用这种方式的原因。算术四舍五入将0.5四舍五入到下一个数字。

请记住,VBA函数不是“不正确的”;正如兰斯在链接访问问题中指出的,这只是一种不同的取整方法。一个不正确的舍入示例是ColdFusion 6.1,我认为,除非在非常具体的情况下,它向上舍入了.5。您的最后一段是向后的:Excel不使用银行舍入,所以说这就是“Excel为什么这样工作”没有什么意义。如果说有什么区别的话,这只会加深Excel为何从银行家取整中脱颖而出的神秘性。@JohnColeman,最后一段是由Joel Spolsky(他在90年代是Excel团队的项目经理)添加的,所以我试着解释一下:“由于银行家四舍五入仅适用于会计,Excel首选具有更广泛适用性的算术四舍五入“.希望不要让事情变得更糟…有趣。由于他也是Stack Overflow的共同创始人,也是有史以来最好的编程博客之一的作者,我可以看到你在编辑它时的犹豫,尽管我怀疑他只是说错了。