给定小数'96 .154',我怎样才能确保它总是向上舍入到96.16(而不是正常舍入到2位小数,这将给出96.15)。
答案 0 :(得分:17)
有点hacky,但这是一种非常直观的方式:
var val = 96.154M;
var result = Math.Ceiling(val * 100) / 100.0M;
答案 1 :(得分:6)
我认为您正在寻找Math.Ceiling
方法。
您可以将其与乘数组合以指定要舍入的小数位数。像这样,
public float roundUp(float number, int numDecimalPlaces)
{
double multiplier = Math.Pow(10, numDecimalPlaces))
return Math.ceiling(number*multiplier) / multiplier;
}
答案 2 :(得分:6)
您可以向该值添加0.005,然后对结果进行舍入。
答案 3 :(得分:0)
以下是值和基本分数的roundUp方法的代码。您应该用于问题的基本部分是0.05M。然而,该方法可用于其他常见场景,即基本分数为0.5M;并且您可以以有趣的方式应用它,例如使用0.3M的基本分数。好吧,我希望它能回答你的问题,玩得开心:
static decimal roundUp(decimal aValue, decimal aBaseFraction)
{
decimal quotient = aValue / aBaseFraction;
decimal roundedQuotient = Math.Round(quotient, 0);
decimal roundAdjust = 0.0M;
if (quotient > roundedQuotient)
{
roundAdjust = aBaseFraction;
}
return roundAdjust + roundedQuotient * aBaseFraction;
}
答案 4 :(得分:0)
这是我的RoundUp方法版本,在此可以是特定的十进制
void Main()
{
Console.WriteLine(RoundUp(2.8448M, 2));
//RoundUp(2.8448M, 2).Dump();
}
public static decimal RoundUp(decimal numero, int numDecimales)
{
decimal valorbase = Convert.ToDecimal(Math.Pow(10, numDecimales));
decimal resultado = Decimal.Round(numero * 1.00000000M, numDecimales + 1, MidpointRounding.AwayFromZero) * valorbase;
decimal valorResiduo = 10M * (resultado - Decimal.Truncate(resultado));
if (valorResiduo < 5)
{
return Decimal.Round(numero * 1.00M, numDecimales, MidpointRounding.AwayFromZero);
}
else
{
var ajuste = Convert.ToDecimal(Math.Pow(10, -(numDecimales + 1)));
numero += ajuste;
return Decimal.Round(numero * 1.00000000M, numDecimales, MidpointRounding.AwayFromZero);
}
}