如何在Dart中将double转换为int?

Tod*_*ery 44 dart

以下产生以下错误:

int calc_ranks(ranks)
{
  double multiplier = .5;
  return multiplier * ranks;
}
Run Code Online (Sandbox Code Playgroud)

返回类型'double'不是'int',由方法'calc_ranks'定义

如何舍入/强制转换为int?

rig*_*old 58

使用以下round()方法将其舍入:

int calc_ranks(ranks) {
    double multiplier = .5;
    return (multiplier * ranks).round();
}
Run Code Online (Sandbox Code Playgroud)

  • 或者将其截断为int:return(乘数*等级).toInt(); (见https://api.dartlang.org/docs/channels/stable/latest/dart_core/double.html) (7认同)
  • @Evertion 我遇到过 `(0.57 * 100).toInt()` 解析为 `56` 的情况,所以伙计们,要小心。 (4认同)

Ale*_*uin 37

您只需使用toInt()将a转换numint.

int calc_ranks(ranks)
{
  double multiplier = .5;
  return (multiplier * ranks).toInt();
}
Run Code Online (Sandbox Code Playgroud)

请注意,要完成相同的操作,您可以使用截断除法运算符:

int calc_ranks(ranks) => ranks ~/ 2;
Run Code Online (Sandbox Code Playgroud)


Cop*_*oad 25

您可以使用以下任何一种。

double d = 20.5;

int i = d.toInt(); // i = 20
int i = d.round(); // i = 21
int i = d.ceil();  // i = 21
int i = d.floor(); // i = 20
Run Code Online (Sandbox Code Playgroud)

  • Floor 和 ceil 会将 double 转换为最接近的 int,分别向下和向上,因此 (20.1).floor() 将是 20,(20.1).ceil() 将是 21。 toInt 截掉尾数,只留下特征,而 round 则使得尾数低于 0.5 的数字下降,其他数字上升。 (3认同)
  • 那么,toInt 和 Floor 或 round 和 ceil 之间有什么区别 (2认同)

jit*_*555 23

我看到很多答案,但描述较少。希望我的回答能够增加一些价值。让我们初始化该变量,看看使用不同的方法它会如何变化。

 double x = 8.5;
Run Code Online (Sandbox Code Playgroud)

toInt()

它截断十进制值。

 int a = x.toInt();
 print(a); // 8
Run Code Online (Sandbox Code Playgroud)

截短()

它还会截断十进制值。

 int b = x.truncate();
 print(b); // 8
Run Code Online (Sandbox Code Playgroud)

圆形的()

它返回最接近的整数。它使用半向上舍入模式。

  int c = x.round();
  print(c); // 9
Run Code Online (Sandbox Code Playgroud)

天花板()

它返回大于该值的最接近的整数。

  int c = x.ceil();
  print(c); // 9
Run Code Online (Sandbox Code Playgroud)

地面()

它返回小于该值的最接近的整数。

  int c = x.floor();
  print(c); // 8
Run Code Online (Sandbox Code Playgroud)


小智 7

我查看了上面的答案并添加了更多答案以使其更容易理解。

\n
double value = 10.5;\n
Run Code Online (Sandbox Code Playgroud)\n

使用 toInt()

\n
void main(){\n  double value = 10.5;\n  var y = value.toInt();\n  print(y);\n  print(y.runtimeType);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

使用圆()

\n

round() 方法返回最接近双精度的整数。

\n
void main(){\n  double value = 9.6;\n  var b = value.round();\n  print(b);\n  print(b.runtimeType);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

使用 ceil()

\n

ceil() 方法返回等于或大于给定双精度的最小整数。

\n
void main(){\n  double value = 9.5;\n  var d = value.ceil();\n  print(d);\n  print(d.runtimeType);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

使用地板()

\n

Floor() 方法返回不大于给定双精度的最大整数。

\n
void main(){\n  double value = 10.9;\n  var j = value.floor();\n  print(j);\n  print(j.runtimeType);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

结论

\n

我们\xe2\x80\x99已经使用了 4 种不同的技术在 Dart 和 Flutter 中将双精度数转换为整数。您可以选择适合您的用例的方法来解决您的问题。Flutter 非常棒,并且提供了很多令人惊奇的功能。

\n


And*_*dré 5

要将 double 转换为 int 只是这样:除法

double01 ~/ double02
Run Code Online (Sandbox Code Playgroud)

PS:运算符 x ~/ y 比 (x / y).toInt() 更高效。

乘法、加法和减法

(double01 * double02).toInt
(double01 + double02).toInt
(double01 - double02).toInt
Run Code Online (Sandbox Code Playgroud)