В 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());
}