在这一行:
double i = 0xF0000000;
literal 是uint 类型,但它被隐式转换为double。当您调用i.GetType() 时,它总是 会打印System.Double,因为变量的类型是double...only 它可以保存的值是double.
请注意,如果您以 long 或 ulong 开头,则此转换为 double 意味着您可能会丢失精度。例如:
using System;
public class Program
{
static void Main()
{
long x = 123456789012345678;
double y = 123456789012345678;
Console.WriteLine(x.ToString("n"));
Console.WriteLine(y.ToString("n"));
}
}
打印
123,456,789,012,345,678.00
123,456,789,012,346,000.00
注意double 中最后几位数字是如何丢失的,因为从long 到double 的隐式转换可能会丢失精度。 (两者都有 64 位可用,但在 double 中只有其中一些位用于尾数。)
对于 int 或 uint 文字来说这不是问题,但值得注意的是转换正在发生。