[英]Understanding Bankers Rounding in .NET
據我了解,.NET 中的默認舍入模式是“銀行家舍入”,它遵循以下規則:
我們可以用下面的例子來證明這一點:
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.23350
或1.23450
到三個位置,它們都將 go 到1.234
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.