繁体   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