起初,抱歉我的英语不好。 我有代码片段:
long x = 9223372036854775807L;
double f = x;
Console.WriteLine(x);
Console.WriteLine(f);
输出是:
9223372036854775807
9,22337203685478E+18
编译和执行此代码时,我没有收到任何错误。 在将Long转换为Double时,我们的精度会下降。 为什么C#在这种情况下不需要显式转换?
谢谢大家。
答案 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
的重载方法
Console.WriteLine(System.Int64 value);
Console.WriteLine(Systen.Double value);