为什么在比较一个浮点数和一个双精度数时输出结果?
这个问题在这里已经有了答案:
当你做第一次赋值时,常量被截断以适合float
。 当你做第二次赋值时, float
-precision文字1.1111...11F
被转换为double
。 由于c
包含1.1111...11F
文字的值,所以d
初始化等同于
double d = ((double)c);
这两个赋值都会改变文字常量的精度,但它们会以不同的方式进行更改。 这就是为什么你在前两个WriteLine
看到不同的打印输出。
当你比较c
和d
,具有较低精度的值(即c
)被转换为具有较高精度的类型,即double
。 这与您将1.1111...11F
文字分配给变量d
时所执行的转换具有相同的转换,因此这些值在==
操作中相同。 换句话说,当你这样做
Console.WriteLine(c == d);
编译器会这样做:
Console.WriteLine(((double)c) == d);
这就是为什么比较返回true
。