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