Java 为什么铸造给我这些奇怪的结果?

Java 为什么铸造给我这些奇怪的结果?,java,casting,Java,Casting,这是密码 public static void main(String[] args) { double x=5.6556464566546546546556465465465; float y=(float)x; double z= 1+y; System.out.println(x+"\n"+y+"\n"+z); } } 这就是输出 5.6556464566546545 5.655

这是密码

    public static void main(String[] args) {
      double x=5.6556464566546546546556465465465;
      float y=(float)x;
      double z=  1+y;
        System.out.println(x+"\n"+y+"\n"+z);
    }
}
这就是输出

5.6556464566546545
5.6556463
6.655646324157715
我可以理解x和y的值,但是z是从3°之后的分数中得到的


非常感谢

由于它们的存储方式,浮点是Java中实际数字的近似值。如果您需要精确的值,请改用。

该问题在上有详细讨论。希望它能回答您的问题。您定义了一个双精度浮点,然后将其转换为单精度。这意味着额外的精度被丢弃了。这里没什么奇怪的。另请参见:。