Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

В качестве альтернативы вы можете использовать UltimateRoundingFunction, приведенную в этом блоге: http://rajputyh.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 ответ для этой поддержки:)