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

时间:2011-08-25 11:19:14

标签: c# vb.net function math

如何实现以下四舍五入?

0.012608376> 0.015

2.1> 2.5

2.4> 2.5

2.5> 2.5

2.6> 3

.01> .05

3 个答案:

答案 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

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