In Dart is there a quick way to convert int to double?

Very simple issue. I have the useless class:

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

I then commit the mortal sin and call new Useless(0);In checked mode (which is how I run my tests) that blows up, because 'int' is not a subtype of type 'double'.

Now, it works if I use new Useless(0.0) , but honestly I spend a lot of time correcting my tests putting .0s everywhere and I feel pretty dumb doing that.

As a temporary measure I rewrote the constructor as:

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

But that's ugly and I am afraid slow if called often. Is there a better way to do this?

4

9 Answers

Simply toDouble()

Example:

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

Thanks to @jamesdlin who actually gave this answer in a comment to my previous answer...

0

In Dart 2.1, integer literals may be directly used where double is expected. (See )

Note that this is syntactic sugar and applies only to literals. int variables still won't be automatically promoted to double, so code like:

double reciprocal(double d) => 1 / d;
int x = 42;
reciprocal(x);

would fail, and you'd need to do:

reciprocal(x.toDouble());
0

You can also use:

int x = 15;
double y = x + .0;
3

use toDouble() method.
For e.g.:

int a = 10
print(a.toDouble)
//or store value in a variable and then use
double convertedValue = a.toDouble()

From this attempt:

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

You can use the parse method of the double class which takes in a string.

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

A more compact way of writing the above class using constructor's initialisers is:

class Useless{ double _field; Useless(double field):_field=double.parse(field.toString());
}
0

Since all divisions in flutter result to a double, the easiest thing I did to achieve this was just to divide the integer value with 1: i.e.int x = 15;double y = x /1;

There's no better way to do this than the options you included :(

I get bitten by this lots too, for some reason I don't get any warnings in the editor and it just fails at runtime; mighty annoying :(

I'm using a combination:

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; }
}

This is how you can cast from int to doubleint a = 2;double b = a*1.0;

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like