[解決済み】なぜ.NETはデフォルトで銀行員の丸めを使用するのですか?
2022-03-31 19:22:15
質問
ドキュメントによると
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になってしまった。
解決方法は?
おそらく、このアルゴリズムの方が優れているからでしょう。 何度も丸めを行ううちに、すべての0.5が上にも下にも同じように丸められるように平均化されるでしょう。 これにより、例えば丸められた数字をたくさん足す場合、実際の結果をよりよく見積もることができます。 これは、ある人が期待するものとは違うかもしれませんが、おそらく、より正しいことだと言えるでしょう。
関連
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] データテーブルの並べ替え
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] Math.round(0.4999999999994) はなぜ1を返すのですか?
-
[解決済み] Math.Round(2.5)はなぜ3でなく2を返すのですか?
-
[解決済み】.NETで文字列が不変なら、なぜSubstringはO(n)時間かかるの?
-
[解決済み】.NET 4.5でのデフォルトのSecurityProtocolについて
-
[解決済み】.NETで構造体のデフォルトコンストラクタを定義できないのはなぜですか?
-
[解決済み】.NETのforeachループでコレクションがNULLの場合、NullRefExceptionが投げられるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Visual Studioの "ターゲットフレームワーク "が見つからない
-
[解決済み] データテーブルがすでに別のデータセットに属している
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] 到達不能なホストに対してソケット操作を行おうとした
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] .NET Framework 4 マルチターゲティングパックがアンインストールできない
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] SQL Serverでは、MONEYとDECIMAL(x,y)のどちらをデータ型として選択すべきでしょうか?
-
[解決済み] HashSetとListの性能比較
-
[解決済み】Python 3.xの丸め動作について