Java BigDecimal的负分数为二进制形式

时间:2016-12-27 12:30:56

标签: java arrays bigdecimal

我需要建议如何正确地将负小数部分转换为二进制。 我的固定点自定义数据类型需要转换为byte[]。 所以,目前我需要实现这样的转换:

BigDecimal -> byte[] -> BigDecimal

据我所知,分数遵循相同的2's complement形式作为整数部分,对吧? 如何区分“平原-1”与负分数? 简短的通用案例将非常有用。

如何用二进制文件写-1.375和-0.375?

1 个答案:

答案 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)); 数组长度。