web-dev-qa-db-fra.com

Dans Dart, existe-t-il un moyen rapide de convertir int en double?

Question très simple. J'ai la classe inutile:

class Useless{
  double field;
  Useless(this.field);
}

Je commets ensuite le péché mortel et appelle new Useless(0); En mode vérifié (c'est ainsi que je lance mes tests) qui explose, car 'int' n'est pas un sous-type de type 'double' =.

Maintenant, cela fonctionne si j'utilise new Useless(0.0), mais honnêtement, je passe beaucoup de temps à corriger mes tests en mettant des .0 partout et je me sens assez stupide de le faire.

À titre temporaire, j'ai réécrit le constructeur comme suit:

    class Useless{
      double field;
      Useless(num input){
          field = input.toDouble();
      }
    }

Mais c'est moche et j'ai peur lent si on m'appelle souvent. Y a-t-il une meilleure manière de faire cela?

36
CarrKnight

Dans Dart 2.1 , les littéraux entiers peuvent être directement utilisés là où double est attendu. (Voir https://github.com/Dart-lang/sdk/issues/34355 .)

Notez que cela s'applique uniquement aux littéraux . int les variables ne seront toujours pas automatiquement promues en double, donc du code comme:

double reciprocal(double d) => 1 / d;

int x = 42;
reciprocal(x);

échouera toujours, et vous devrez faire:

reciprocal(x.toDouble());
29
jamesdlin

Simplement toDouble()

Exemple:

int intVar = 5;
double doubleVar = intVar.toDouble();

Merci à @jamesdlin qui a effectivement donné cette réponse dans un commentaire à ma réponse précédente ...

30
Ronen Rabinovici

Vous pouvez aussi utiliser:

int x = 15;
double y = x + .0;
14
Mattia

Il n'y a pas de meilleur moyen de le faire que les options que vous avez incluses :(

Je suis mordu par ce lot aussi, pour une raison quelconque, je ne reçois aucun avertissement dans l'éditeur et il échoue juste au moment de l'exécution; puissant ennuyeux :(

4
Danny Tuppeny

De cette tentative:

class Useless{
  double field;
  Useless(num input){
    field = input.toDouble();
  }
}

Vous pouvez utiliser la méthode d'analyse du double class qui prend une chaîne.

class Useless{
  double field;
  Useless(num input){
    field = double.parse(input.toString()); //modified line
  }
}

Une manière plus compacte d'écrire la classe ci-dessus en utilisant les initialiseurs du constructeur est:

class Useless{
  double _field;
  Useless(double field):_field=double.parse(field.toString());
}
3
Lebohang Mbele