非常简单的问题。我有无用的课程:
class Useless{
double field;
Useless(this.field);
}
然后我犯了致命的罪并致电new Useless(0);
在检查模式(这是我运行测试的方式)中,因为'int'不是'double'类型的子类型。
现在,如果我使用new Useless(0.0)
,它就有效,但老实说,我花了很多时间来纠正我的测试,把.0s放在各处,我觉得这样做很蠢。
作为临时措施,我将构造函数重写为:
class Useless{
double field;
Useless(num input){
field = input.toDouble();
}
}
但这很难看,如果经常打电话我会害怕。有更好的方法吗?
答案 0 :(得分:13)
仅toDouble()
示例:
int intVar = 5;
double doubleVar = intVar.toDouble();
感谢@jamesdlin在对我以前的答案的评论中实际给出了这个答案...
答案 1 :(得分:13)
In Dart 2.1,在需要double
的地方可以直接使用整数。 (请参见https://github.com/dart-lang/sdk/issues/34355。)
请注意,这仅适用于文字。 int
变量仍然不会自动提升为double
,因此代码如下:
double reciprocal(double d) => 1 / d;
int x = 42;
reciprocal(x);
仍然会失败,您需要这样做:
reciprocal(x.toDouble());
答案 2 :(得分:8)
您还可以使用:
int x = 15;
double y = x + .0;
答案 3 :(得分:4)
没有比你选择的选项更好的方法:(
我也被这个地方所困扰,出于某种原因,我在编辑器中没有得到任何警告而且它在运行时失败了;强大的烦人:(
答案 4 :(得分:2)
这次尝试:
class Useless{
double field;
Useless(num input){
field = input.toDouble();
}
}
您可以使用double class
中的parse method,它接受一个字符串。
class Useless{
double field;
Useless(num input){
field = double.parse(input.toString()); //modified line
}
}
使用构造函数的初始化程序编写上述类的一种更紧凑的方法是:
class Useless{
double _field;
Useless(double field):_field=double.parse(field.toString());
}
答案 5 :(得分:1)
我正在使用组合:
static double checkDouble(dynamic value) {
if (value is String) {
return double.parse(value);
} else if (value is int) {
return 0.0 + value;
} else {
return value;
}
}
答案 6 :(得分:1)
使用toDouble()方法。
例如:
int a = 10
print(a.toDouble)
//or store value in a variable and then use
double convertedValue = a.toDouble()
答案 7 :(得分:0)
由于颤振中的所有除法结果都加倍,因此我要做的最简单的事情就是将整数值除以1:
即
int x = 15;
double y = x /1;
答案 8 :(得分:0)
Dart语言具有两种数字类型:int和double。前者是一个任意精度的有符号整数,而后者是IEEE-754双精度浮点数。
没有隐式转换,因此您必须显式使用toDouble
,或者可能更好:将y输入为num,它是double和int的超类。
int x = 11;
double y = x.toDouble();
如果数字不能表示为双精度数,则返回一个近似值。对于数值较大的整数,近似值可能是无限的。