为什么C#不需要显式转换来转换Long To Double?

时间:2013-02-13 18:25:48

标签: c# casting

起初,抱歉我的英语不好。 我有代码片段:

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

输出是:

9223372036854775807
9,22337203685478E+18

编译和执行此代码时,我没有收到任何错误。 在将Long转换为Double时,我们的精度会下降。 为什么C#在这种情况下不需要显式转换?

谢谢大家。

3 个答案:

答案 0 :(得分:12)

该语言内置了一些隐式转换。

下表来自documentation,这就是为什么您可以在没有显式转换或转换的情况下分配值的原因:

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

在文件中(强调我的):

  

精确但不是幅度可能会在转换中丢失   int,uint,long或ulong浮动,从long或ulong到double

答案 1 :(得分:0)

尝试

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

答案 2 :(得分:-4)

Console.WriteLine有服务器重载方法,您正在使用static Console Class的重载方法

  1. Console.WriteLine(System.Int64 value);
  2. Console.WriteLine(Systen.Double value);
  3. 它与类型转换(显式或隐式)无关