Why does C # require no explicit casting to convert Long To Double?

advertisements

At first, sorry for my bad english. I have fragment of code:

long x = 9223372036854775807L;
double f = x;
Console.WriteLine(x);
Console.WriteLine(f);

Output is:

9223372036854775807
9,22337203685478E+18

I'm not getting any errors while compiling and execution this code. We have a loss of precision while converting Long to Double. Why C# does not require explicit casting in that case ?

Thanks all.


The language has some implicit conversion built into it.

The following table is from the documentation, which is why you are allowed to assign the value without an explicit cast or conversion:

From        To
===============================================================================
sbyte       short , int, long, float, double, or decimal
byte        short , ushort, int, uint, long, ulong, float, double, or decimal
short       int , long, float, double, or decimal
ushort      int , uint, long, ulong, float, double, or decimal
int         long , float, double, or decimal
uint        long , ulong, float, double, or decimal
long        float , double, or decimal
char        ushort , int, uint, long, ulong, float, double, or decimal
float       double
ulong       float , double, or decimal

And in the documentation it states (emphasis mine):

Precision but not magnitude might be lost in the conversions from int, uint, long, or ulong to float and from long or ulong to double.