在c#中自定义Math.Round()结果

时间:2013-11-19 09:20:21

标签: c# rounding

Math.Round()将始终根据数学规则返回结果。

例如 0.124 将四舍五入为 0.12 ,如果为 2位小数完成。

我可以让它总是给我下一个更高的值,例如 0.124 舍入到2位小数应该给 0.13 同样吗?

5 个答案:

答案 0 :(得分:1)

您可以使用Baszz提到的Math.Ceiling。您需要乘以并除以某个因子来模拟舍入行为:

 var decimals = 2;
 var fac = Math.Pow(10, decimals);
 var result = ((int)Math.Ceiling(0.124 * fac)) / fac;

 Console.WriteLine(result);

答案 1 :(得分:1)

试试这个:

var input = 0.124;
var decimals = 2;
var r = (input == Math.Round(input, decimals)) ? 
    Math.Round(input, decimals) : 
    Math.Round(input + Math.Pow(10, -decimals), decimals);

您可以创建一个扩展方法:

public static double RoundUp(this double input, int decimals)
{
    return  (input == Math.Round(input, decimals)) ?
        Math.Round(input, decimals) :
        Math.Round(input + Math.Pow(10, -decimals), decimals);
}

并使用它:

double input = 0.1224;
var decimals = 3;
var r = input.RoundUp(decimals);

答案 2 :(得分:0)

我认为你应该看一下Math.Ceiling()方法:

http://msdn.microsoft.com/en-us/library/zx4t0t48(v=vs.110).aspx

请看SO上的这篇文章,解释如何使用它:

How to round a decimal up?

答案 3 :(得分:0)

为此,您尝试使用math.ceiling()而不是使用math.round()..!

       Math.Round() --> Rounding values  
       Math.Ceiling()  --> Next higher value
       Math.Floor() --> Next lower value

答案 4 :(得分:0)

在这里,举例说明Math.Ceiling()概念

   using System;

     class Program
         {
         static void Main()
         {
     // Get ceiling of double value.
      double value1 = 123.456;
      double ceiling1 = Math.Ceiling(value1);

    // Get ceiling of decimal value.
      decimal value2 = 456.789M;
      decimal ceiling2 = Math.Ceiling(value2);

    // Get ceiling of negative value.
      double value3 = -100.5;
      double ceiling3 = Math.Ceiling(value3);

    // Write values.
      Console.WriteLine(value1);
      Console.WriteLine(ceiling1);
      Console.WriteLine(value2);
      Console.WriteLine(ceiling2);
      Console.WriteLine(value3);
      Console.WriteLine(ceiling3);
      }
    }

Output
******

123.456
124
456.789
457
-100.5
-100