簡體   English   中英

了解 .NET 中的銀行家四舍五入

[英]Understanding Bankers Rounding in .NET

據我了解,.NET 中的默認舍入模式是“銀行家舍入”,它遵循以下規則:

  • 如果要四舍五入的數字小於 5,則向下舍入。
  • 如果要四舍五入的數字等於 5,則四舍五入到最接近的偶數。
  • 如果要舍入的數字大於 5,則向上舍入。

我們可以用下面的例子來證明這一點:

double[] values = {1.14, 1.15, 1.16, 1.24, 1.25, 1.26};
foreach (double value in values)
{
    Console.WriteLine(Math.Round(value, 1));
}

// 1.1 (1.14: round down)
// 1.2 (1.15: round to even)
// 1.2 (1.16: round up)
// 1.2 (1.24: round down)
// 1.2 (1.25: round to even)
// 1.3 (1.26: round up)

然后我嘗試了這個:

double value = 1.23456;
Console.WriteLine(Math.Round(value, 3));

// 1.235

我的期望是,這將通過以下邏輯產生1.234

  • 1.234偶數
  • 要四舍五入的數字是5 ,因此它應該向偶數四舍五入。

那么,為什么這會產生1.235

我認為您的誤解是您說“如果要四舍五入的數字是... ”,而實際上是所有數字,四舍五入之后的所有數量。

1.23456中,您正在舍入大於0.0005.00056 ,因此它向上舍入。

銀行家的四舍五入僅適用於中途,以打破平局。 1.233501.23450到三個位置,它們都將 go 到1.234

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM