![](/img/trans.png)
[英]Round a number using Math.Round with MidpointRounding.AwayFromZero
[英]When specifying the number of decimals, is the behaviour of Math.Round with MidpointRounding.ToEven correct?
我正在嘗試使用Math.Round但是我得到的結果並不是我所期望的。 我發現只有當下面的數字是5並且之后不能有任何其他數字時,它才會四舍五入。
Assert.AreEqual<double>(4d, Math.Round(4.5)); // Pass
Assert.AreEqual<double>(5d, Math.Round(4.6)); // Pass
Assert.AreEqual<double>(6d, Math.Round(5.5)); // Pass
Assert.AreEqual<double>(4d, Math.Round(4.500001)); // Fail - 5
Assert.AreEqual<double>(4d, Math.Round(4.45)); // Pass
Assert.AreEqual<double>(4.4, Math.Round(4.45, 1)); // Pass
Assert.AreEqual<double>(4.4, Math.Round(4.450001, 1)); // Fail - 4.5
Decimal.Round的行為也是相同的。
Assert.AreEqual<decimal>(4m, Decimal.Round(4.500001m)); // Fail - 5
Assert.AreEqual<decimal>(4.4m, Decimal.Round(4.450001m, 2)); // Fail - 4.5
不應該舍入只考慮正在舍入的小數位后面的數字,如MidpointRounding中所述 ?
舍入操作采用隱含或指定精度的原始數字; 檢查下一個數字,即精度加一; 並返回最接近的數字,其精度與原始數字相同。
行為是正確的。 您認為4.50001,4.51,4.59,4.599999999999應該全部向下舍入到4.顯然,4.5以上的數字比4更接近於5,因此應該四舍五入為5。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.