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?
答案 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:
统计上,数字样本的一半被四舍五入,一半被四舍五入 四舍五入
这是对货币进行四舍五入以补偿财务余额计算中的总和误差的方法。