c#中的round函数

时间:2011-10-06 13:54:51

标签: c# rounding bankers-rounding

   public static decimal Round(
decimal d,
int decimals
    )

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

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

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

为什么3.45正在返回3.4 ..我无法理解这个输出。任何人都可以帮忙

3 个答案:

答案 0 :(得分:4)

您可以使用从MSDN获取MidpointRounding参数的Round重置来更改此行为:

ToEven (默认情况下,AKA Bankers Rounding)当一个数字介于另外两个数字之间时,它会向最接近的偶数舍入。
AwayFromZero 当一个数字介于另外两个数字之间时,它会向最接近零的数字四舍五入。

答案 1 :(得分:1)

就像你说的那样,

  

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

使用3.45时,小数点右边的第一个数字是5,因为4是偶数,所以它保持不变。这是一种非常标准的舍入方法,因为如果5总是向上舍入,这可以加权平均值和总和高于应有的值。

答案 2 :(得分:0)

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

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

所以你有:

AwayFromZero

有关您可以使用的所有选项的详细说明,请参阅this answer