为什么在比较一个浮点数和一个双精度数时输出结果?
这个问题在这里已经有了答案:
当你做第一次赋值时,常量被截断以适合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 。
