簡體   English   中英

dart 中雙倍乘法失敗

[英]Failed to multiply double in dart

嘗試將數字與 dart 中的浮點相乘時出現錯誤。 有誰知道為什么會這樣?

void main() {
    double x = 37.8;
    int y = 100;

    var z = x * y;
    print(z);
    // 3779.9999999999995
}

在其他語言(C#/C++)中,我會得到結果: 3780.0

您可以使用toStringAsFixed來控制小數位數。

void main() {
  double x = 37.8;
  int y = 100;

  var z = x * y;
  print(z.toStringAsFixed(1));
  // 3780.0
}

這是完全可以預料的,因為 37.8(或者更確切地說,0.8 部分)不能在 IEEE754 標准中精確地編碼為二進制分數,因此您會得到一個接近的近似值,它將在分數的 LSB 中包含一個錯誤項。

如果您需要無損數字(例如,如果您正在處理貨幣計算),請查看十進制package。

如果您的浮點數有足夠的位分配給分數以使錯誤位不受影響,那么一個更簡單的技巧是在計算后將數字四舍五入到您關心的小數位數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM