この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 1|答える: 0

[ヒント] .NET/C#はMath.RoundのMidpointRoundingを使って丸めています

[リンクをコピー]
掲載地46秒前 | | | |
要件:丸めによく使われ、精度要件にはあまり敏感ではありません。

小数点以下2桁を丸めるために、開発者は以下のコードを書きました。
コードはとてもシンプルです、開発者の皆さん実際の結果は12.12で、予想された四捨五入結果の12.13と矛盾していました

この結果の理由は、Math.Roundがデフォルトで丸めルールを使わず、単に偶数に丸めを使っているためです。

5まで切り上げてペアにします

いわゆる6から5の切り上げでペアを作るというのは、有効数字を決定した後、次の有効数字が4以下なら切り捨てる、6以上なら1切り上げることを意味します。次の有効数字が5の場合、

  • 5の前の数が奇数の場合は、5を切り上げて1進みます
  • 5が偶数の前にあれば、5を飛ばします(0は偶数です)。

統計的には、五捨五入よりも偶数に丸める方が正確です。なぜなら、計算が多い場合、五倍に五捨五入するとより大きな数値になるからです。

例えば:

1.15+1.25+1.35+1.45 = 5.2

有効数字が小数点以下1位であれば、丸めの原理を用いて結果が得られます

1.2 + 1.3 + 1.4 + 1.5 = 5.4

5つの偶数に四捨五入した結果は次の通りです。

1.2 + 1.2 + 1.4 + 1.4 = 5.2

これは丸めの規則により正確な結果が得られることを示しています。

数学ラウンド

では、Math.Roundを使って期待される丸めをどうやって実現すればよいのでしょうか?

実際、C#のMath.Roundは多くのオーバーロードメソッドを提供しており、その中には2つのメソッドが含まれます。
両方法ともモードと呼ばれる第三のパラメータを提供しており、これはMidpointRoundingの列挙変数で、2つの選択可能な値を持つ

  • Away FromZero - まとめて
  • ToEven - 四捨五入から均等四捨五入へ

したがって、理想的な丸め結果を求めるなら、次の符号を使用できます。
以下に示すような中点四捨五入列挙:



参考:ハイパーリンクのログインが見えます。




先の:高並行性EFコアクエリに対するWITH(NOLOCK)最適化
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com