如何实现以下四舍五入?
0.012608376> 0.015
2.1> 2.5
2.4> 2.5
2.5> 2.5
2.6> 3
.01> .05
答案 0 :(得分:9)
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
顺便说一句,最好与小数一起使用。
答案 1 :(得分:0)
static double RoundHalfUp(double value) {
var scale = 1.0;
while (value * scale < 0.1) scale *= 10;
return Math.Ceiling(value * 2) / (2 * scale);
}
示例代码。这根本没有考虑特殊情况,是的,它没有你的第一个案例,因为它不清楚你想要什么。请提出问题。
答案 2 :(得分:0)
取你想要舍入的小数位数。如果大于5轮。如果小于5舍入并加5(到小数点),如果等于5则什么都不做。
2.1&gt;向下舍入到2.0>添加.5&gt; 2.5
2.4&gt;向下舍入到2.0>添加.5&gt; 2.5
2.5&gt; 2.5
2.6&gt;围绕3
这很难,因为你永远不会在相同的小数位上舍入。有没有更好的方法来做到这一点?您不应该将数据舍入到不同的位置,具体取决于它的小数点。例如,你应该总是舍入到十分之一,或者总是舍入到百分之一,而不是依赖于数据。