Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.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
C# MS Excel货币四舍五入法_C#_Excel_Rounding_Currency - Fatal编程技术网

C# MS Excel货币四舍五入法

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舍入为最接近的偶数整数。请注意,如果

想知道在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舍入为最接近的偶数整数。请注意,如果将四舍五入四舍五入到更多的小数位数,则相同的逻辑将转移到较低的小数位数。例如,
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秒钟。舍入法
!你自己做过测试吗?