【问题标题】:C# Math.Round UpC# Math.Round Up
【发布时间】:2014-06-11 08:40:07
【问题描述】:

我有一个问题。

我有一个小数,我想把它四舍五入到小数点后 2 位,不是用普通方法,而是

0.2013559322033898305084745763

期望的结果:0.21

我该怎么做?

【问题讨论】:

标签: c# rounding


【解决方案1】:

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

Math.Ceiling(x * 100) / 100;

【讨论】:

    【解决方案2】:

    听起来您想要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 的回答一样。)

    现在,关于此的两个警告:

    • 很可能在某些情况下,我们正在执行多项操作这一事实对您不利。浮点数学可能会很奇怪,尤其是浮点 binary。 (哎呀,带有浮点二进制点的“小数位”的想法已经有问题了。)
    • 这将始终向上取整,即远离负无穷大。所以它会将 -0.201 舍入到 -0.20。如果您想从 0 舍入,您可能需要单独处理负值,例如与

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

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 1970-01-01
      • 2019-06-11
      • 2011-05-27
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多