我有一个十进制数字,可以像下面这样:
189.182
我想这一轮最多到小数点后2位,所以输出将是以下几点:
189.19
Math类中是否内置了此功能,还是其他功能?我知道天花板功能存在,但这似乎没有做我想要的 - 它会绕到最近的int,所以在这种情况下只是'189'.
Mik*_*ker 44
乘以100,呼叫上限,除以100,我认为你要求的
public static double RoundUp(double input, int places)
{
double multiplier = Math.Pow(10, Convert.ToDouble(places));
return Math.Ceiling(input * multiplier) / multiplier;
}
Run Code Online (Sandbox Code Playgroud)
用法如下:
RoundUp(189.182, 2);
Run Code Online (Sandbox Code Playgroud)
这通过将小数点右移2个位置(因此它位于最后8位的右侧)然后执行上限操作,然后将小数点移回其原始位置来工作.
pax*_*blo 18
您可以使用:
decimal n = 189.182M;
n = System.Math.Ceiling (n * 100) / 100;
Run Code Online (Sandbox Code Playgroud)
可以在此处找到各种舍入函数的说明.
Rao*_*oul 10
在 .NET Core 3.0 及更高版本中,可以通过 MidpointRounding 枚举使用三种附加舍入策略。此外MidpointRounding.AwayFromZero,MidpointRounding.ToEven它现在还包括:
1. MidpointRounding.ToNegativeInfinity
2. MidpointRounding.ToPositiveInfinity
3. MidpointRounding.ToZero
Run Code Online (Sandbox Code Playgroud)
对于这个特定问题,您需要使用MidpointRounding.ToPositiveInfinity,这将始终将数字向上舍入。请注意,这仅在数字非负数时才有效。有关示例,请参阅下表。
| 原始号码 | 至负无穷 | 至正无穷 | 归零 |
|---|---|---|---|
| 3.55 | 3.5 | 3.6 | 3.5 |
| 2.83 | 2.8 | 2.9 | 2.8 |
| 2.54 | 2.5 | 2.6 | 2.5 |
| 2.16 | 2.1 | 2.2 | 2.1 |
| -2.16 | -2.2 | -2.1 | -2.1 |
| -2.54 | -2.6 | -2.5 | -2.5 |
| -2.83 | -2.9 | -2.8 | -2.8 |
| -3.55 | -3.6 | -3.5 | -3.5 |
有关中点舍入的更多信息,请参阅https://learn.microsoft.com/en-us/dotnet/api/system.midpointrounding
当然还有让它工作的代码:
// function explained: Math.Round(number, amount of decimals, MidpointRounding);
decimal number = 189.182m;
number = Math.Round(number, 2, MidpointRounding.ToPositiveInfinity);
// result: number = 189.19
Run Code Online (Sandbox Code Playgroud)
var numberToBeRound1 = 4.125;
var numberToBeRound2 = 4.175;
var numberToBeRound3 = 4.631;
var numberToBeRound4 = 4.638;
var numberOfDecimalPlaces = 2;
var multiplier = Math.Pow(10, numberOfDecimalPlaces);
//To Round Up => 4.13
var roundedUpNumber = Math.Ceiling(numberToBeRound1 * multiplier) / multiplier;
//To Round Down => 4.12
var roundedDownNumber = Math.Floor(numberToBeRound1 * multiplier) / multiplier;
//To Round To Even => 4.12
var roundedDownToEvenNumber = Math.Round(numberToBeRound1, numberOfDecimalPlaces, MidpointRounding.ToEven);
//To Round To Even => 4.18
var roundedUpToEvenNumber = Math.Round(numberToBeRound2, numberOfDecimalPlaces, MidpointRounding.ToEven);
//To Round To Away From Zero => 4.63
var roundedDownToAwayFromZero = Math.Round(numberToBeRound3, numberOfDecimalPlaces, MidpointRounding.AwayFromZero);
//To Round To Away From Zero => 4.64
var roundedUpToAwayFromZero2 = Math.Round(numberToBeRound4, numberOfDecimalPlaces, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)