如何圆到一半,总是在积极的方向?

我如何实现以下四舍五入?

0.012608376> 0.015

2.1> 2.5

2.4> 2.5

2.5> 2.5

2.6> 3

.01> .05

 public double Round(double input, int decimalPlaces) { double precision = 2.0 * Math.Pow(10, decimalPlaces - 1); // Ceiling also rounds negative values in positive direction return Math.Ceiling(x * precision) / precision; } 

使用这样:

 Round(0.012608376, 3) returns 0.015 Round(2.1, 1) returns 2.5 Round(2.4, 1) returns 2.5 Round(2.5, 1) returns 2.5 Round(2.6, 1) returns 3 Round(.01, 2) returns .05 

顺便说一句,最好与小数一起使用。

 static double RoundHalfUp(double value) { var scale = 1.0; while (value * scale < 0.1) scale *= 10; return Math.Ceiling(value * 2) / (2 * scale); } 

示例代码。 这根本没有考虑到特殊情况,是的,它在第一种情况下失败了,因为它不清楚你想要什么。 请详细说明问题。

取你想要舍入的小数位数。 如果大于5轮。 如果小于5舍入并加5(到那个小数位),如果等于5则什么都不做。

2.1>向下舍入到2.0>添加.5> 2.5

2.4>向下舍入到2.0>添加.5> 2.5

2.5> 2.5

2.6>向上舍入3

这很难,因为你永远不会在相同的小数位上舍入。 有没有更好的方法来做到这一点? 您不应该将数据舍入到不同的位置,具体取决于它的小数点。 例如,你应该总是四舍五入到十分之一,或者总是四舍五入到百分之一,而不是依赖于数据。