Есть ли простой способ в С# округлить десятичную до ближайшего квартала, то есть x.0, x.25, x.50 x.75 например, 0,21 будет округлено до 0,25, 5,03 будет округлено до 5,0
Заранее благодарим за помощь.
Есть ли простой способ в С# округлить десятичную до ближайшего квартала, то есть x.0, x.25, x.50 x.75 например, 0,21 будет округлено до 0,25, 5,03 будет округлено до 5,0
Заранее благодарим за помощь.
Умножьте его на четыре, round, как вам нужно на целое число, а затем разделите его на четыре:
x = Math.Round (x * 4, MidpointRounding.ToEven) / 4;
Различные варианты округления и их объяснения можно найти в этом отличном ответе здесь: -)
В качестве альтернативы вы можете использовать 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 ответ для этой поддержки:)