web-dev-qa-db-ja.com

C#で小数点以下を最も近い四半期に丸めます

C#で、小数を最も近い四半期に丸める簡単な方法はありますか?つまり、x.0、x.25、x.50 x.75、たとえば0.21は0.25に丸められ、5.03は5.0に丸められます。

助けてくれてありがとう。

38
bplus

それを4で乗算し、 round 必要に応じて整数にした後、もう一度4で除算します。

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

丸めのさまざまなオプションとその説明は、この優れた回答にあります ここ :-)

71
paxdiablo

または、このブログに記載されている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の回答を使用する必要があります:)

10
Yogee