C#小数的舍入问题

时间:2018-10-12 06:56:58

标签: c#

Decimal a = Decimal.Round((Decimal)3.5 * (Decimal)0.01,2);
MessageBox.Show(a.ToString());
a = Decimal.Round((Decimal)4.5 * (Decimal)0.01,2);
MessageBox.Show(a.ToString());

a = Decimal.Round(Decimal.Multiply((Decimal)3.5, (Decimal)0.01), 2);
MessageBox.Show(a.ToString());
a = Decimal.Round(Decimal.Multiply((Decimal)4.5, (Decimal)0.01), 2);
MessageBox.Show(a.ToString());

当输入不同时,为什么所有消息框都显示0.04?

2 个答案:

答案 0 :(得分:4)

这是预期的行为。由于默认的MidpointRounding模式为ToEven,因此0.035和0.045都将四舍五入为0.04。

答案 1 :(得分:1)

因为使用bankers rounding

  

两个最接近的整数四舍五入为最接近的偶数

指定回合规则:

Decimal.Round((Decimal)4.5 * (Decimal)0.01, 2, MidpointRounding.AwayFromZero)

来自以下post

  

统计上,数字样本的一半被四舍五入,一半被四舍五入   四舍五入

这是对货币进行四舍五入以补偿财务余额计算中的总和误差的方法。