В Dart есть быстрый способ конвертировать int в double?
Очень простая проблема. У меня есть бесполезный класс:
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();
}
}
Но это уродливо, и я боюсь медленно, если его зовут часто. Есть лучший способ сделать это?
Ответы
Ответ 1
В 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
Просто toDouble()
для использования в таком виде:
int intVar = 5;
double doubleVar = intVar.toDouble();
Спасибо @jamesdlin, который фактически дал этот ответ в комментарии к моему предыдущему ответу...
Ответ 3
Вы также можете использовать:
int x = 15;
double y = x + .0;
Ответ 4
Там нет лучшего способа сделать это, чем варианты, которые вы включили :(
Меня тоже укусят эти лоты, по какой-то причине я не получаю никаких предупреждений в редакторе, и он просто терпит неудачу во время выполнения; могучий раздражает :(
Ответ 5
Из этой попытки:
class Useless{
double field;
Useless(num input){
field = input.toDouble();
}
}
Вы можете использовать метод parse double class
который принимает строку.
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());
}