如何将BigDecimal转换为十六进制字符串?

时间:2013-03-25 13:10:15

标签: java hex bigdecimal

我有一些BigDecimal类型,例如18446744073709551616,我想将其转换为十六进制值。

有没有办法做到这一点而不是手动做?

3 个答案:

答案 0 :(得分:9)

根据您的示例判断,您应使用BigInteger代替BigDecimal。这样你可以使用

new BigInteger("18446744073709551616").toString(16)

如果您无法更改原始对象的类型,请稍后在方法

中将其转换为BigInteger
new BigDecimal("18446744073709551616").toBigInteger().toString(16);

答案 1 :(得分:2)

考虑到将十进制值转换为十六进制需要指数。您可以使用Formatter获取表示数值的十六进制字符串。

  

%A:结果被格式化为带有效数和指数的十六进制浮点数   %X:结果格式为十六进制整数

如果要转换小数值,请使用%A转换:

System.out.println(String.format("%A", myBigDecimal));

奇怪的是,上面的代码对于Formatter的javadoc是正确的,但是javadocs中似乎存在一个相关的 9年错误,已经修复了几周前在Java 8中:5035569 : (fmt) assertion error in Formatter for BigDecimal and %a。您可以使用以下模拟代码:

System.out.println(String.format("%A", myBigDecimal.doubleValue()));

修改
从帖子中的价值来判断,你并不关心小数部分。您可以在模式中使用%X转换,只提供BigInteger表示形式:

BigDecimal bd = new BigDecimal("18446744073709551616");
System.out.println(String.format("%X", bd.toBigInteger()));

答案 2 :(得分:0)

理论上可以将BigDecimal表示为十六进制字符串,类似于Double.toHexString

0x1.199999999999p+1

但是AFAIK没有标准的方法来实现它并且自定义实现并不容易