ドキュメントによると、このdecimal.Round
メソッドは、ほとんどのアプリケーションでは一般的ではない偶数に丸めるアルゴリズムを使用します。そのため、私は常に、より自然な四捨五入アルゴリズムを実行するカスタム関数を作成することになります。
public static decimal RoundHalfUp(this decimal d, int decimals)
{
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;
}
このフレームワーク設計の決定の背後にある理由を知っている人はいますか?
フレームワークにラウンド ハーフアップ アルゴリズムの組み込み実装はありますか? または、管理されていない Windows API でしょうか。
decimal.Round(2.5m, 0)
結果として 3 を期待しているのに 2 になると単純に書くと、初心者にとって誤解を招く可能性があります。