如何在Dart中进行整数除法?
我对Dart中的整数除法有困难,因为它会给我错误:“在异常时中断:类型'double'不是'c'的'int'类型的子类型。” 以下是代码:如何在Dart中进行整数除法?,dart,Dart,我对Dart中的整数除法有困难,因为它会给我错误:“在异常时中断:类型'double'不是'c'的'int'类型的子类型。” 以下是代码: inta=500; int b=250; INTC; c=a/b;// 整数除法是 c=a~/b; 你也可以使用 c=(a/b).floor(); c=(a/b.ceil(); 如果您想定义分数应该如何处理。这是因为Dart使用double表示dart2js中的所有数字。如果你玩这个游戏,你可以得到有趣的结果: 代码: 结果: true true 实际
inta=500;
int b=250;
INTC;
c=a/b;// 整数除法是
c=a~/b;
你也可以使用
c=(a/b).floor();
c=(a/b.ceil();
如果您想定义分数应该如何处理。这是因为Dart使用double
表示dart2js
中的所有数字。如果你玩这个游戏,你可以得到有趣的结果:
代码:
结果:
true
true
实际上,当涉及数字时,建议使用typenum
,除非您有充分的理由将其设置为int
(例如,在for循环中)。如果要继续使用int
,请使用如下截断除法:
int a = 500;
int b = 250;
int c;
c = a ~/ b;
否则,我建议使用num
类型。简短回答
使用c=a~/b
长答案
根据文档,int
是没有小数点的数字,double
是带小数点的数字
double
和int
都是num
的子类型
当使用/
运算符将两个整数相除时,结果将被计算为双精度
。而c
变量被初始化为一个整数。您至少可以做两件事:
使用c=a~/b
~/
运算符返回一个int
使用var c代码>。这将创建一个可分配给任何类型的动态变量,包括double
和int
和String
等
截断除法算子
可以使用从除法运算中获取整数结果:
4~/2;//2(内部)
除法运算符
在运行时,将始终返回一个double
值(请参阅文档):
for(变量i=4;i=4;i=3){
i/2;//2(双精度)
}
运行时与编译时
您可能已经注意到,我为第二个示例(常规除法运算符)编写了一个循环,而不是4/2
原因如下:
当一个表达式可以在编译时被计算时,它将在那个阶段被简化,并相应地被类型化。编译器只需在编译时将4/2
转换为2
,这显然是int
。循环阻止编译器计算表达式
只要您的除法在运行时发生(即,对于编译时无法预测的变量),/
(double
)和~/
(int
)运算符的返回类型将是您在运行时为表达式看到的类型
有关更多参考,请参阅
结论
一般来说,正则除法运算符/
总是可以用来获得int
结果
然而,编译器优化可能会导致一些奇怪的结果:)Dart仅在dart2js中使用双精度来表示数字。VM正确地区分了这两种类型。请更新您的答案。只是一个小的更新:即使Dart虚拟机对整数除法进行双精度运算,即使它不会产生分数。~/不过还是帮了忙,谢谢!
int a = 500;
int b = 250;
int c;
c = a ~/ b;