這個問題在這里已經有了答案: 浮點數學壞了嗎? (31 個回答) 昨天關閉。
我發現這個非常簡單的計算結果不正確:0.19999999999999998。(這也發生在 Dartpad 上)
void main() {
print(-0.1 0.3);
}
為什么會發生這種情況,如何避免?
uj5u.com熱心網友回復:
那是因為您在使用 double 型別時會失去精度。
為避免這種情況,您有幾種選擇:
- 使用一些十進制庫,如https://pub.dev/packages/decimal
- 乘以有效位數并使用整數進行數學運算,有關相關 SO 問題Dart double Division precision 的更多資訊
uj5u.com熱心網友回復:
這是由于浮點數的內部表示幾乎出現在所有編程語言中。參見有關浮點表示的本教程。
幕后發生的事情是,字串“-0.1”被轉換成一串位,這些位對應于大約等于值 $-0.1$ 的特定數字;同樣為 0.3 美元。當您減去它們時,這些近似誤差以這樣一種方式排列,以產生您通過象征性地進行數學運算得到的結果。
如果你真的需要像這樣的數字的“精確”數學,你可以查看提供Decimal或Rational型別的包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/350634.html
標籤:镖
