17

给定一个小数“96.154”,我如何确保它总是四舍五入到 96.16(而不是正常四舍五入到 2 位小数,这将得到 96.15)。

4

5 回答 5

19

一种hacky但非常直观的方法:

var val = 96.154M;

var result = Math.Ceiling(val * 100) / 100.0M;
于 2012-08-03T11:16:35.580 回答
7

您可以将 0.005 添加到该值,然后将结果四舍五入。

于 2012-08-03T11:18:06.127 回答
6

我认为您正在寻找Math.Ceiling方法。

您可以将其与乘数结合使用,以指定要舍入的小数位数。像这样,

public float roundUp(float number, int numDecimalPlaces)
{
    double multiplier = Math.Pow(10, numDecimalPlaces))

    return Math.ceiling(number*multiplier) / multiplier;
}
于 2012-08-03T11:16:59.157 回答
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;
}
于 2016-07-09T15:02:23.377 回答
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);
    }
}
于 2017-11-04T16:33:49.703 回答