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

C# 在c中自定义Math.Round()结果#,c#,rounding,C#,Rounding,Math.Round()将始终根据数学规则返回结果 例如,0.124将四舍五入到0.12,如果对小数点后两位执行此操作 我可以让它总是给我下一个更高的值吗,例如0.124四舍五入到小数点后两位应该给0.13,同样地?我想你应该看看Math.天花()方法: 请看下面这篇文章,说明如何使用它: 您可以使用Baszz提到的Math.天花板。您需要乘以或除以某个因子来模拟舍入行为: var decimals = 2; var fac = Math.Pow(10, decimals); var r

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

例如,0.124将四舍五入到0.12,如果对小数点后两位执行此操作


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

我想你应该看看
Math.天花()
方法:

请看下面这篇文章,说明如何使用它:


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

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

 Console.WriteLine(result);
试试这个:

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);

为此,请尝试math.天花()而不是使用math.round()


下面是Math.天花板()概念的示例


一个比我更好的复制品,只舍入到整数,不是吗?是的,这可能会有帮助,但这并不是一个完整的答案。特别是因为它只不过是一个链接答案。
       Math.Round() --> Rounding values  
       Math.Ceiling()  --> Next higher value
       Math.Floor() --> Next lower value
   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