찾다

 >  Q&A  >  본문

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,而不是精确的计算尾数部分的值?

天蓬老师天蓬老师2813일 전889

모든 응답(2)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-18 09:20:28

    가수를 0으로 채워도 정밀도는 떨어지지 않습니다. 부동 소수점 숫자는 다음과 같이 표현됩니다

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 09:20:28

    Float는 4바이트를 차지하고, Double은 8바이트를 차지합니다.
    메모리 복사 과정에서는 4바이트만 복사되고 나머지 바이트는 기본적으로 0입니다. (릴리스 모드에서는 디버그 모드에서는 반드시 그렇지는 않습니다.)

    회신하다
    0
  • 취소회신하다