1
   public static decimal Round(
decimal d,
int decimals
    )

decimals 参数指定返回值的小数位数,范围为 0 到 28。如果 decimals 为零,则返回一个整数。

如果 d 中小数点右边第一个数字的值为 5,则小数位为奇数则四舍五入,偶数则保持不变。如果 d 的精度小于小数,则 d 原样返回。

    Math.Round(3.44, 1); //Returns 3.4.
   Math.Round(3.45, 1); //Returns 3.4.

为什么 3.45 返回 3.4 ..我无法理解这个输出。谁能帮忙

4

3 回答 3

4

您可以通过使用来自 MSDN的采用MidpointRounding参数的 Round 重载来更改此行为:

ToEven(默认,AKA Bankers Rounding)当一个数字在两个其他数字之间时,它会向最接近的偶数四舍五入。
AwayFromZero 当一个数字在两个其他数字之间时,它会向离零最近的数字四舍五入。

于 2011-10-06T13:58:01.963 回答
1

像你说的,

如果 d 中小数点右边第一个数字的值为 5,则小数位为奇数则四舍五入,偶数则保持不变。

对于 3.45,小数点右边的第一位是 5,由于 4 是偶数,所以它保持不变。这是一种非常标准的四舍五入方式,因为如果 5 总是向上四舍五入,这会使平均值和总和之类的权重高于应有的值。

于 2011-10-06T14:01:12.213 回答
0

默认四舍五入是MidpointRounding.ToEven(银行家的四舍五入),这意味着它将倾向于舍入位置处的数字的偶数(即,它将移动到 3.4,因为 4 是偶数)。

这是为了最大限度地减少当所有中点舍入方向相同时可能发生的错误累积(尽管这当然取决于您的输入数据 - 正数和负数的相等混合可能很好AwayFromZero)。

所以你有了:

Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4 (down towards 4).
Math.Round(3.54, 1); //Returns 3.5.
Math.Round(3.55, 1); //Returns 3.6 (up towards 6).

有关您可用的所有选项的详细说明,请参阅此答案

于 2011-10-06T14:05:10.220 回答