C# MS Excel货币四舍五入法
想知道在Excel上使用Round()函数时应用哪种舍入方法吗? 当您选择将列的格式设置为带两位小数的货币时,也存在差异。C# MS Excel货币四舍五入法,c#,excel,rounding,currency,C#,Excel,Rounding,Currency,想知道在Excel上使用Round()函数时应用哪种舍入方法吗? 当您选择将列的格式设置为带两位小数的货币时,也存在差异。 我需要在我正在编写的C程序中模拟Excel的结果。注意:Excel和Excel VBA使用两种不同的算法 在Excel中: =四舍五入(0.5,0)返回1 =ROUND(1.5,0)返回2 在Excel VBA中: Print Round(0.5,0) 0 Print Round(1.5,0) 2 VBA使用银行家舍入:将0.5舍入为最接近的偶数整数。请注意,如果
我需要在我正在编写的C程序中模拟Excel的结果。注意:Excel和Excel VBA使用两种不同的算法 在Excel中:
=四舍五入(0.5,0)
返回1
=ROUND(1.5,0)
返回2
在Excel VBA中:
Print Round(0.5,0)
0
Print Round(1.5,0)
2
VBA使用银行家舍入:将0.5舍入为最接近的偶数整数。请注意,如果将四舍五入四舍五入到更多的小数位数,则相同的逻辑将转移到较低的小数位数。例如,Round(0.05,1)
在Excel VBA中返回零(与Excel中的0.1相反)
这是我最不喜欢的VBA特性之一。它与Excel不一致,使情况更糟
数字格式对这个问题没有影响。谢谢,我不知道这个问题+1。在vba中,我可以想象使用WorksheetFunction.Round(myRng,0)可能是一个很好的替代方法来保持它的准确性?@datatoo:True,但需要注意的是,从vba访问Excel的工作表函数会带来一些开销,如果您对许多数字进行舍入,这将影响性能。但是,如果您只使用它几次,它就可以了,
WorksheetFunction.Round(0.5,0)
会像您所期望的那样返回1。另一个糟糕、难看的解决方法是CDbl(Format(0.5,0”)
,即使用格式转换为字符串(与Round
相反,出于某种原因,它不使用银行家舍入法)然后使用CDbl
返回到Double
。令人惊讶的是,这比工作表函数.Round快得多!在我的旧机器上,用VBA将1000万个数字舍入需要2秒钟的时间,使用舍入法(速度很快,但使用了愚蠢的银行家舍入法),使用CDbl(格式(0.5,“0”)
)需要20秒钟,使用工作表功能需要30秒钟。舍入法
!你自己做过测试吗?