Why C# does not require explicit casting for convert Long To Double?

前端 未结 2 1013
面向向阳花
面向向阳花 2021-02-14 23:26

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

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


        
相关标签:
2条回答
  • 2021-02-14 23:49

    try this

    long x = 9223372036854775807L;
    decimal f = x;
    Console.WriteLine(x);
    Console.WriteLine(f);
    
    0 讨论(0)
  • 2021-02-15 00:00

    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.

    0 讨论(0)
提交回复
热议问题