我需要建议如何正确地将负小数部分转换为二进制。
我的固定点自定义数据类型需要转换为byte[]
。
所以,目前我需要实现这样的转换:
BigDecimal -> byte[] -> BigDecimal
据我所知,分数遵循相同的2's complement
形式作为整数部分,对吧?
如何区分“平原-1”与负分数?
简短的通用案例将非常有用。
如何用二进制文件写-1.375和-0.375?
答案 0 :(得分:0)
我认为您可以编码为(已更新):
转换为byte []
<
从byte []
转换 ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
BigDecimal d = BigDecimal.valueOf(-0.00390625);
dos.writeInt(d.scale());
dos.write(d.unscaledValue().toByteArray());
dos.close(); // flush
byte[] array = bos.toByteArray();
注意:您可能希望保存 ByteArrayInputStream bis = new ByteArrayInputStream(array);
DataInputStream dis = new DataInputStream(bis);
int sc = dis.readInt(); //grab 4 bytes
BigInteger unscaledVal = new BigInteger(Arrays.copyOfRange(array, 4, array.length));
System.out.println(new BigDecimal(unscaledVal, sc));
数组长度。