Как округлить десятичную цифру?

Учитывая десятичную '96.154 ', как я могу обеспечить, чтобы он всегда округлялся до 96.16 (в отличие от обычного округления до 2 десятичных знаков, которые дали бы 96.15).

Ответы

Ответ 1

Вид хакерского, но очень интуитивного способа сделать это:

var val = 96.154M;

var result = Math.Ceiling(val * 100) / 100.0M;

Ответ 2

Вы можете добавить 0.005 к значению, а затем округлить результат.

Ответ 3

Я думаю, что вы ищете метод Math.Ceiling.

Вы можете комбинировать это с множителем, чтобы указать, сколько десятичных знаков округлить. Как это,

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

    return Math.ceiling(number*multiplier) / multiplier;
}

Ответ 4

Вот код метода roundUp для значения и базовой дроби. Базовая доля, которую вы должны использовать для вашего вопроса, равна 0,05 М. Однако этот метод может быть использован для другого общего сценария, который представляет собой базовую фракцию 0,5 М; И вы можете применить его интересными способами, например, используя базовую долю 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;
}

Ответ 5

Вот моя версия метода 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);
    }
}