-1
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?

4

2 回答 2

4

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

于 2018-10-12T07:01:22.160 回答
1

因为它使用银行家四舍五入

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

指定回合规则:

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

从以下帖子

统计上,数字样本的一半向上舍入,一半向下舍入

这就是如何四舍五入以补偿财务余额计算中的总和误差。

于 2018-10-12T07:01:27.277 回答