我尝试过使用Math.Round和MidpointRounding.这似乎没有做我需要的.
例:
52.34567 rounded to 2 decimals UP = 52.35
1.183 rounded to 2 decimals DOWN = 1.18
Run Code Online (Sandbox Code Playgroud)
我需要编写自定义函数吗?
编辑:
我应该更具体一点.
有时我需要像23.567这样的数字来向下舍入到23.56.在这种情况下......
Math.Round(dec, 2, MidpointRounding.AwayFromZero) gives 23.57
Math.Round(dec, 2, MidpointRounding.ToEven) gives 23.57
Run Code Online (Sandbox Code Playgroud)
可能会出现最多9位小数的小数,需要四舍五入到小数点后的1,2,3或甚至4位.
atk*_*sch 39
尝试使用decimal.Round():
decimal.Round(x, 2)
Run Code Online (Sandbox Code Playgroud)
x您的值在哪里,2是您希望保留的小数位数.
您还可以通过传递第三个参数来指定.5向上或向下舍入:
decimal.Round(x, 2, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)
编辑:
根据新的要求(即,尽管数量大于下一个间隔的"中途",数字有时会向下舍入),您可以尝试:
var pow = Math.Pow(10, numDigits);
var truncated = Math.Truncate(x*pow) / pow;
Run Code Online (Sandbox Code Playgroud)
Truncate()会关闭小数的非整数部分.请注意,numDigits上面应该是您要保留的位数,而不是小数位总数等.
最后,如果你想强制向上舍入(截断实际上是强制向下舍入),你只需Truncate()在再次划分之前将1添加到调用结果中.
pas*_*ein 25
尝试使用Math.Ceiling(向上)或Math.Floor(向下).例如Math.Floor(1.8) == 1.
Jef*_*f E 14
假设您使用的decimal是数字类型,
static class Rounding
{
public static decimal RoundUp(decimal number, int places)
{
decimal factor = RoundFactor(places);
number *= factor;
number = Math.Ceiling(number);
number /= factor;
return number;
}
public static decimal RoundDown(decimal number, int places)
{
decimal factor = RoundFactor(places);
number *= factor;
number = Math.Floor(number);
number /= factor;
return number;
}
internal static decimal RoundFactor(int places)
{
decimal factor = 1m;
if (places < 0)
{
places = -places;
for (int i = 0; i < places; i++)
factor /= 10m;
}
else
{
for (int i = 0; i < places; i++)
factor *= 10m;
}
return factor;
}
}
Run Code Online (Sandbox Code Playgroud)
例:
Rounding.RoundDown(23.567, 2) prints 23.56
Run Code Online (Sandbox Code Playgroud)
对于接受答案的较短版本,以下是可以使用的RoundUp和RoundDown函数:
public double RoundDown(double number, int decimalPlaces)
{
return Math.Floor(number * Math.Pow(10, decimalPlaces)) / Math.Pow(10, decimalPlaces);
}
public double RoundUp(double number, int decimalPlaces)
{
return Math.Ceiling(number * Math.Pow(10, decimalPlaces)) / Math.Pow(10, decimalPlaces);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54894 次 |
| 最近记录: |