C#Math.Round Up

我有一个问题。

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

0.2013559322033898305084745763

期望的结果:0.21

我怎样才能做到这一点?

听起来你想要一个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); } 

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

 Math.Ceiling(x * 100) / 100;