Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Dart中进行整数除法?_Dart - Fatal编程技术网

如何在Dart中进行整数除法?

如何在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 实际

我对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
实际上,当涉及数字时,建议使用type
num
,除非您有充分的理由将其设置为
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;