双重类型值之间的比较

时间:2016-09-16 21:31:08

标签: java

我声明了三个实数值,并尝试将每个值进行比较,如下所示。

public class Main {
    public static void main(String[] args) {
        float f = 0.1f;
        double d= 0.1;
        double d2 = (double)f;

        System.out.println(d);
        System.out.println(d2);
        System.out.println();

        System.out.println(d==f);
        System.out.println(d==d2);
        System.out.println(d2==f);
    }
}

在第一次比较(d==f)中,由于d是double类型而f是float类型,因此编译器将变量f更改为double类型。这意味着f中存储的值将被重新分配为double类型值。因此,此比较返回false。而且,执行d==d2比较并在第一次比较中以相同的方式返回false。

但是,最后一次比较d2==f,它返回true。我希望它返回false,因为变量f被重新分配到double类型值,d2f中存储的值会略有不同。但结果是正确的。

你能解释为什么它给出真实的第三个比较吗?

2 个答案:

答案 0 :(得分:0)

正如您所说,在比较doublefloat时,float会转换为double

因此,让我们考虑一下在这种情况下你的变量会发生什么。

d2是一个从浮点数转换而来的双精度型,f是一个正在转换为双精度浮动的浮点数。

由于它们都以相同的方式从同一类型转换为相同的类型,因此转换的工作方式并不重要,它们都会评估相同的内容。

答案 1 :(得分:0)

0.1是以二进制表示的重复数。

由于float的精度高于double,因此从float转换为浮点数时会丢失信息,但从{{1}转换时不会丢失信息一个`double。

enter image description here(标志减1)

由于d2来自fd2f都有23位精度,但d仍有52位精度。