C#Math.Round Up

时间:2014-06-11 08:40:07

标签: c# rounding

我有一个问题。

我有一个小数,我想以2位小数舍入这个,而不是通常的方式,而是

0.2013559322033898305084745763

期望的结果:0.21

我该怎么做?

2 个答案:

答案 0 :(得分:4)

不直接,所以你必须使用一个技巧:

Math.Ceiling(x * 100) / 100;

答案 1 :(得分:3)

听起来你想要一个Math.Ceiling的版本,但需要多个小数位。你可以加倍,使用Math.Ceiling,然后再划分:

public static double CeilingWithPlaces(double input, int places)
{
    double scale = Math.Pow(10, places);
    double multiplied = input * scale;
    double ceiling = Math.Ceiling(multiplied);
    return ceiling / scale;
}

(如果你当然需要2个小数位,你可以硬编码100的等级,正如Dennis_E的答案所做的那样。)

现在,有两点需要注意:

  • 很可能会出现我们执行多项操作的事实对您不利的情况。浮点数学可能很奇怪,特别是浮动二进制点。 (哎呀,"小数位"浮动二进制点的想法已经成问题了。)
  • 这将始终围绕,即远离负无穷大。所以它会在-0.201到-0.20之间。如果你想要从0舍入,你可能需要单独处理负值,例如与

    if (input < 0)
    {
        return -CeilingWithPlaces(-input, places);
    }