在某些情況下,Visual Studio 2019 下的舍入無法按檔案中所述的預期作業。
在 Visual Studio 2019 下,當我運行 Math.Round(1.275, 2) 時,我得到 1.27。根據默認舍入,它應該舍入到最接近的偶數 1.28。如果我運行 Math.Round(0.275, 2) 我得到 0.28。
uj5u.com熱心網友回復:
該檔案還為您提供了這種意外行為的原因:
舍入中點值時,舍入演算法執行相等測驗。由于浮點格式中的二進制表示和精度問題,該方法回傳的值可能是意外的。有關詳細資訊,請參閱舍入和精度。
浮點數是根據IEEE 754存盤的,這并不總是您要存盤的實際值的精確表示。您會發現很多資源,您可以在其中了解浮點數如何以二進制表示以及 IEEE 754 的作業原理。
uj5u.com熱心網友回復:
這里有兩件事。
首先,這可能是浮點數的底層表示的結果。檔案本身警告:
舍入中點值時,舍入演算法執行相等測驗。由于浮點格式中的二進制表示和精度問題,該方法回傳的值可能是意外的。
其次,該Math.Round函式還將舍入策略引數作為第三個引數。基于默認的舍入策略,此行為實際上似乎與檔案指定的內容一致。看看這個例子,他們有:
// 3.4 = Math.Round( 3.45, 1)
// -3.4 = Math.Round(-3.45, 1)
// 3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
// 3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
// 3.4 = Math.Round(3.47, 1, MidpointRounding.ToZero)
// -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
// -3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
// -3.4 = Math.Round(-3.47, 1, MidpointRounding.ToZero)
在我看來,默認值會嘗試四舍五入到最接近的整數。例如,2.75 比 2 更接近 3,因此它被四舍五入為 2.8。1.275 則相反。也許我弄錯了,但無論哪種方式,請查看 MidpointRounding 引數 - 這可能會解決您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/521935.html
標籤:VB.net四舍五入
