17

10 進数の '96.154' が与えられた場合、常に 96.16 に切り上げられるようにするにはどうすればよいですか (96.15 になる通常の 2 桁への丸めとは対照的です)。

4

5 に答える 5

19

一種のハッキーですが、そうするための非常に直感的な方法:

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メソッドの私のバージョンです。これは10進数を特定できます

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 に答える
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 に答える