没有正确的四舍五入

时间:2011-04-08 01:55:41

标签: c# rounding

Math.Round(keyRate, 5).ToString("N5")

如果keyRate是一个像3.7066666666这样的数字,你会看到3.70666而不是3.70667

这可能是什么问题?

2 个答案:

答案 0 :(得分:4)

Math.Round函数默认使用所谓的银行家舍入。银行家向往偶数的四舍五入。要获得更传统的舍入类型,请调用Round方法,如下所示:

Math.Round(3.7066666666, 5, MidpointRounding.AwayFromZero);

更正:在再次查看@ slandau的数字后,我意识到银行家的四舍五入不是问题。银行家的舍入仅适用于所需精度右侧的数字的小数部分正好在两个值之间的中间位置。换句话说

Math.Round(3.7066650000, 5, MidpointRounding.AwayFromZero) = 3.70667

而以下(银行家的四舍五入)

Math.Round(3.7066650000, 5, MidpointRounding.ToEven) = 3.70666
无论如何,@ slandau的结果应该是3.70667。

答案 1 :(得分:-1)

您应该使用小数和Math.Round(keyRate, 5, MidpointRounding.AwayFromZero)
它不适用于双