2

BigDecimalタイプがいくつかあります(例:18446744073709551616)。これを16進値に変換したいと思います。小数部分を切り捨てても問題ありません。

手動で行う代わりにこれを行う方法はありますか?

4

3 に答える 3

10

あなたの例から判断すると、のBigInteger代わりに使用する必要がありBigDecimalます。このようにあなたは使うことができます

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

元のオブジェクトのタイプを変更できない場合は、後でメソッドでBigIntegerに変換してください

new BigDecimal("18446744073709551616").toBigInteger().toString(16);
于 2013-03-25T13:26:58.143 に答える
2

10進値を16進に変換するには、指数が必要であることを考慮に入れてください。を使用して、数値を表す16進文字列を取得できますFormatter

%A:結果は、仮数と指数を含む16進浮動小数点数として
フォーマットされます。%X:結果は16進整数としてフォーマットされます。

%A10進値を変換する場合は、変換を使用します。

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

不思議なことに、上記のコードはjavadocに関しては正しいですが、javadocsにFormatter関連する9年前のエラーがあるようです。これは、数週間前にJava 8で修正されました:5035569:(fmt)FormatterのアサーションエラーBigDecimalおよび%aの場合。以下のアナログコードを使用できます。

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

編集
投稿の値から判断すると、小数部分はあまり気にしません。%Xパターンで変換を使用して、BigInteger表現を提供することができます。

BigDecimal bd = new BigDecimal("18446744073709551616");
System.out.println(String.format("%X", bd.toBigInteger()));
于 2013-03-25T13:33:51.277 に答える
1

理論的には、BigDecimalをDouble.toHexStringと同様の16進文字列として表すことができます。

0x1.199999999999p+1

しかし、AFAIKにはそれを行うための標準的な方法がなく、カスタム実装は簡単ではありません

于 2013-03-25T13:15:21.940 に答える