0
//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 编译的。

4

1 回答 1

2

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

有关更多详细信息,我建议查看这个 StackOverflow 问题,我在其中制作了一个详细示例,展示了在原生运行程序和作为 JavaScript 时 Dart 中的数字如何表现:Why dart infers the variable type as a int when I明确说类型是 double ?

于 2022-01-17T12:41:04.293 回答