c#中的Round函数

本文关键字:函数 Round 中的 | 更新日期: 2023-09-27 18:10:31

   public static decimal Round(
decimal d,
int decimals
    )

decimal参数指定返回值中小数位数的个数,取值范围为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..我无法理解这个输出。有人能帮忙吗

c#中的Round函数

您可以通过使用Round重载来改变这种行为,该重载采用midpointrouning参数,来自MSDN:

ToEven(默认,又名Bankers四舍五入)当一个数字在两个数字之间时,它向最近的偶数四舍五入。AwayFromZero当一个数字位于另外两个数字的中间时,它将向离0最近的数字四舍五入

就像你说的,

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

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

默认四舍五入是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).