将双精度值转换为JAVA中的压缩十进制COBOL格式PIC S9(5)V9(4)COMP-3/压缩十进制COBOL形式P



我正在尝试将一个双精度值转换为JAVA中的压缩十进制COBOL格式PIC S9(5(V9(4(COMP-3/压缩十进制COBOL形式PIC S9

双倍值:00000.6775转换为压缩小数:^@^FS,^@

这种对话在java中可能吗?

类似的问题已经在堆栈溢出上回答了多次

对于s9(5(V9(4(comp-3,123.45以字节格式表示为

00 12 34 50 0c

C是的标志

是的,这是可能的,JRecord包会做到这一点(不过可能会截断额外的数字(。

方法是

  • 将双精度转换为无符号且未缩放的长/BigInteger,即123.45->1234500(适用于s9(5(v9(4((
  • 将长小数转换为压缩小数

在这一点上,有几种方法

  • 可重复地除以100,并使用余数查找数组中的字节值。看见https://github.com/bmTas/JRecord/blob/master/Source/JRecord_Project/JRecord_Common/src/main/java/net/sf/JRecord/Types/smallBin/TypePackedDecimal9.java例如
  • 除以10,使用余数&移位4位运算符以创建答案
  • 将数字转换为字符串,在末尾添加符号字符,然后**new BigInteger(UncalledNumberAsString,16(.toByteArray((将进行转换。有关示例,请参见转换

最新更新