Dot-Net
.Net 舍入問題
我在.Net 內部有一個舍入問題。
我將一個 3 位數的數字四捨五入到兩位數,這會導致一個數字出現一些問題。
如果我嘗試將 34.425 舍入到小數點後兩位,它應該舍入到 34.43。我正在使用 roundawayfromzero 選項,到目前為止,它對程序中的每個數字都有效,除了這個數字。
程式碼
Math.Round(34.425, 2, MidpointRounding.AwayFromZero)應該等於 34.43,但它等於 34.42。如果我用任何其他號碼嘗試這個,它工作正常。
Math.Round(34.435, 2, MidpointRounding.AwayFromZero) = 34.44 Math.Round(34.225, 2, MidpointRounding.AwayFromZero) = 34.23 Math.Round(34.465, 2, MidpointRounding.AwayFromZero) = 34.47我只是想看看有沒有人遇到過這個問題?
現在我已經通過將數字轉換為小數來解決這個問題。我已將程式碼更改為此,現在可以正常工作:
Math.Round(CDec(34.425), 2, MidpointRounding.AwayFromZero) = 34.43我只是在尋找為什麼我的舊程式碼不起作用的原因。
謝謝!
將程式碼更新為正確的 AwayFromZero
浮點數從來都不是精確的,34.425 可能有一個內部表示 34.4249999999999.. 將四捨五入到 34.42。
如果您需要數字的精確表示,請使用
decimal類型。
MidpointRounding.ToEven對您是否實際使用或有點困惑MidpointRounding.AwayFromZero。如果您ToEven按照第一個片段所示使用,這是預期的行為。