BigDecimalタイプがいくつかあります(例:18446744073709551616)。これを16進値に変換したいと思います。小数部分を切り捨てても問題ありません。
手動で行う代わりにこれを行う方法はありますか?
BigDecimalタイプがいくつかあります(例:18446744073709551616)。これを16進値に変換したいと思います。小数部分を切り捨てても問題ありません。
手動で行う代わりにこれを行う方法はありますか?
あなたの例から判断すると、のBigInteger
代わりに使用する必要がありBigDecimal
ます。このようにあなたは使うことができます
new BigInteger("18446744073709551616").toString(16)
元のオブジェクトのタイプを変更できない場合は、後でメソッドでBigIntegerに変換してください
new BigDecimal("18446744073709551616").toBigInteger().toString(16);
10進値を16進に変換するには、指数が必要であることを考慮に入れてください。を使用して、数値を表す16進文字列を取得できますFormatter
。
%A:結果は、仮数と指数を含む16進浮動小数点数として
フォーマットされます。%X:結果は16進整数としてフォーマットされます。
%A
10進値を変換する場合は、変換を使用します。
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()));
理論的には、BigDecimalをDouble.toHexStringと同様の16進文字列として表すことができます。
0x1.199999999999p+1
しかし、AFAIKにはそれを行うための標準的な方法がなく、カスタム実装は簡単ではありません