java float 向double 隐式转换精度丢失
天蓬老师
天蓬老师 2017-04-18 09:18:28
0
2
820

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(2)
左手右手慢动作

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

洪涛

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!