我想在整数数组中存储一个Double,并且能够再次读取Double,例如:
int[2] doubleToIntArr(double)
double intArrToDouble(int[2])
如何实现这一目标?
答案 0 :(得分:6)
以这种方式:
使用Double.doubleToLongBits(double)
将double
变为long
。
使用移位和屏蔽来提取long
的高低部分,并将其存储在int[]
(或Integer[]
)中。
(还有其他方法可以实现这一点,但是如果你关注性能,这可能是在纯Java中实现它的最有效方法。)
请注意,此转换在计算上没有用处。除了将int
值转换为double
之外,很难对这些belongs_to
值进行任何具有计算意义的事情。
答案 1 :(得分:4)
double d = 100;
long l = Double.doubleToLongBits(d);
int i1 = (int)(l >> 32);
int i2 = (int)l;
double d2 = Double.longBitsToDouble(((long)i1 << 32) | (i2&0xFFFFFFFFL));
System.out.println(d2);
答案 2 :(得分:2)
java.nio.ByteBuffer
类具有允许您从字节数组读取和写入标准数据类型的方法。
你应该可以用它来写Double
,然后读出两个ints
,例如
ByteBuffer buf = ByteBuffer.allocate(8);
buf.putDouble(d);
int i1 = buf.getInt(0);
int i2 = buf.getInt(4);