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,而不是精确的计算尾数部分的值?
PHP中文网2017-04-18 09:20:28
Float は 4 バイトを占有しますが、Double は 8 バイトを占有します。
メモリ コピー プロセス中、4 バイトのみがコピーされ、残りのバイトはデフォルトで 0 になります (リリース モードでは、これはデバッグ モードでは必ずしも当てはまりません)。