java float 向double 隐式转换精度丢失

java float 向double 隐式转换精度会有丢失

    float f = 8.69f;
    int a = Float.floatToIntBits(f);
    String floatStr = Integer.toBinaryString(a);

    double d1 = f;
    long b = Double.doubleToLongBits(d1);
    String convertStr = Long.toBinaryString(b);

    double d2 = 8.69d;
    long c = Double.doubleToLongBits(d2);
    String doubleStr = Long.toBinaryString(c);

    System.out.println(floatStr);
    System.out.println(convertStr);
    System.out.println(doubleStr);

输出为
1000001000010110000101000111101 100000000100001011000010100011110100000000000000000000000000000 100000000100001011000010100011110101110000101000111101011100001

想问下,为什么在隐式转换的过程中,jvm只是单纯的拷贝float中的尾数部分,然后补0,而不是精确的计算尾数部分的值?

阅读 4.6k
2 个回答

尾数补0没有损失精度,浮点数就是这样表示的

float是占用4个字节,而double是占用8个字节。
在内存复制的过程中,只复制了4个字节进去,其余的字节默认为0.(release模式下,debug模式下就不一定了。)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题