由于 double 类型,dart 代码在 dartpad 和本地的行为不同

A dart code behaves differently in dartpad and local because of double type

//Works on Dartpad

main() {
  var pi = 3.14; //3.14159265359
  var numbers = 0;
  dynamic result = 1.2;

  while (result.runtimeType == double) {
    numbers++;
    result = numbers * pi;
  }
  print('$result / $numbers = $pi');
}

//Works on local

main() {
  var pi = 3.14; //3.14159265359
  var numbers = 0;
  dynamic result = 1.2;
  while ((result - result.truncate()) != 0) {
    numbers++;
    result = numbers * pi;
  }
  print('${result.truncate()} / $numbers = $pi');
}

问题是每当你初始化一个双精度变量时,dartpad 可以在它变成整数时将它转换为整数,但本地编译器不会这样做。 难道是js引起的?因为据我所知dartpad是用js编译的。

你观察到的是 Dart 试图隐藏 JavaScript 的限制,其中数字总是表示为 double 个对象(所以没有 int)。由于 DartPad 正在将您的代码编译为 JavaScript,然后在您的浏览器中执行它,您将得到这种行为。

有关更多详细信息,我建议查看这个 Whosebug 问题,我在其中做了一个详细的示例,展示了当 运行 您的程序本机和 JavaScript 时 Dart 中的数字如何表现: