[解決済み] Math.Round(2.5)はなぜ3でなく2を返すのですか?
質問
C#では
Math.Round(2.5)
は2です。
本来は3なんですよね?C#ではなぜ2になっているのでしょうか?
どのように解決するのですか?
まず、これはC#のバグではなく、.NETのバグでしょう。C#は言語です。
Math.Round
が実装されています。
そして第二に、いいえ - もしあなたが読むなら ドキュメント デフォルトの丸め方は、quot;round to even" (banker's rounding)であることがわかります。
<ブロッククオート
戻り値
タイプ System.Double
aに最も近い整数。
aの分数成分の半分が
2つの整数の間で、一方が
偶数と奇数の場合、偶数の
が返される。ただし、この
メソッドは
Double
の代わりに
の積分型である。
備考
本メソッドの動作はIEEE規格754に準じます。
セクション4. このような丸め方は
四捨五入と呼ばれることもあります。
またはバンカーズ・ラウンディング これは
という丸め誤差が発生します。
中点値の一貫した丸め
を一方向に表示します。
の方法を指定することができます。
Math.Round
を使用して中点を丸める必要があります。
オーバーロード
これは
MidpointRounding
の値を指定します。を持つオーバーロードが1つあります。
MidpointRounding
を持たない各オーバーロードに対応します。
-
Round(Decimal)
/Round(Decimal, MidpointRounding)
-
Round(Double)
/Round(Double, MidpointRounding)
-
Round(Decimal, Int32)
/Round(Decimal, Int32, MidpointRounding)
-
Round(Double, Int32)
/Round(Double, Int32, MidpointRounding)
このデフォルトがうまく選択されたかどうかは別問題です。(
MidpointRounding
は.NET 2.0から導入されたばかりです。それ以前は、望む動作を自分でやらずに実装する簡単な方法があったとは思えません)。特に、歴史が示しているのは
期待される
ほとんどの場合、それはAPI設計の大罪です。私が見ることができるのは
なぜ
バンカーズ・ラウンディングは便利なのですが、まだ多くの人が驚いています。
最も近いJavaの同等のenumを見てみると面白いかもしれませんね(
RoundingMode
) は、さらに多くのオプションを提供します。(中点だけを扱うわけではありません)。
関連
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#でHashtableよりDictionaryが好まれる理由とは?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] Math.round(0.4999999999994) はなぜ1を返すのですか?
-
[解決済み】なぜ.NETはデフォルトで銀行員の丸めを使用するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】この動詞型ではcontent-bodyを送信できない
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] データテーブルの並べ替え
-
[解決済み] VS2017/2015 で .xproj ファイルを開く方法
-
[解決済み] Visual Studioの "ターゲットフレームワーク "が見つからない
-
[解決済み] asp.netでWebサービスのタイムアウト時間を長くする方法は?
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] 文字列から数字を抽出する正規表現
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み] RelativeSourceでWPFバインディングを使用するにはどうしたらいいですか?