Jiew Meng
Jiew Meng

Reputation: 88207

What's wrong with casting 0.0 to double?

I have InvalidCastException when I try to cast 0.0 to double, why is that so? It's fine when I do (float)value instead.

alt text

Upvotes: 28

Views: 14086

Answers (5)

Konrad Rudolph
Konrad Rudolph

Reputation: 545608

In general, when you put a value type into an object (called boxing) you need to unbox it to the exact same value type. You cannot do a conversion to another type instead. This is what happens here.

If you really want to convert the object, you first need to unbox it. Say your original value was a float before you boxed it in an object:

double d = (double) (float) value;

Or use the method proposed by others, which uses Convert. This has the advantage that the original type doesn’t have to be known.

Upvotes: 62

winwaed
winwaed

Reputation: 7801

The float has been boxed as an object. So you're trying to convert a boxed float into a double. Use Vyas's convert instead - it is far more flexible and should always do the right thing:

var val=Convert.ToDouble(value);

Upvotes: 5

Tony the Pony
Tony the Pony

Reputation: 41367

You cannot cast an arbitrary object to double.

Upvotes: 3

Darin Dimitrov
Darin Dimitrov

Reputation: 1038850

That's normal. If the object type is float you cannot cast it to double because they are not of the same type:

object o = 1.0f;
double d = (double)o; // will throw an exception

You need to convert it:

double d = Convert.ToDouble(o);

Upvotes: 10

Vyasdev Meledath
Vyasdev Meledath

Reputation: 9016

use this

var val=Convert.ToDouble(value);

Upvotes: 3

Related Questions