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;