Округление десятичной дроби до ближайшей четверти в C #

Есть ли простой способ в С # округлить десятичную дробь до ближайшей четверти, т.е. x.0, x.25, x.50 x.75, например, 0,21 округляется до 0,25, 5,03 округляется до 5,0

Заранее благодарю за любую помощь.


person bplus    schedule 13.05.2010    source источник


Ответы (2)


Умножьте его на четыре, округлите до целого числа, затем разделите его еще раз на четыре:

x = Math.Round (x * 4, MidpointRounding.ToEven) / 4;

Различные варианты округления и их объяснения можно найти в этом отличном ответе здесь :-)

person paxdiablo    schedule 13.05.2010

В качестве альтернативы вы можете использовать UltimateRoundingFunction, указанную в этом блоге: http://rajputh.blogspot.in/2014/09/the-ultimate-rounding-function.html

//amountToRound => input amount
//nearestOf => .25 if round to quater, 0.01 for rounding to 1 cent, 1 for rounding to $1
//fairness => btween 0 to 0.9999999___.
//            0 means floor and 0.99999... means ceiling. But for ceiling, I would recommend, Math.Ceiling
//            0.5 = Standard Rounding function. It will round up the border case. i.e. 1.5 to 2 and not 1.
//            0.4999999... non-standard rounding function. Where border case is rounded down. i.e. 1.5 to 1 and not 2.
//            0.75 means first 75% values will be rounded down, rest 25% value will be rounded up.
decimal UltimateRoundingFunction(decimal amountToRound, decimal nearstOf, decimal fairness)
{
    return Math.Floor(amountToRound / nearstOf + fairness) * nearstOf;
}

Звоните ниже для стандартного округления. т.е. 1,125 будет округлено до 1,25

UltimateRoundingFunction(amountToRound, 0.25m, 0.5m);

Позвоните ниже, чтобы округлить значения границ в меньшую сторону. т.е. 1,125 будет округлено до 1,00

UltimateRoundingFunction(amountToRound, 0.25m, 0.4999999999999999m);

Так называемое "округление банкира" невозможно с UltimateRoundingFunction, вам нужно пойти с ответом paxdiablo для этой поддержки :)

person Yogee    schedule 18.09.2014
comment
Это именно то, что мне нужно было округлить до ближайшего n. - person joelc; 20.03.2018