2017-12-05 4 views
0

Stringで表される数がNumberFormatExceptionをスローするこのJavaコード行を持っています。 2,147,483,647を超える。Java:NumberFormat例外のために、StringパラメータでIntパラメータと同じInteger.toHexString()関数を取得する必要があります。

ため:intデータ型は、32ビットの2の補数の符号付き整数である

。それは -2,147,483,648の最小値とNumberFormatExceptionが投げ2147483647

コードの最大値があります。

String largeNumberAsAString = "9999999999"; 
Integer.toHexString(Integer.parseInt(largeNumberAsAString)); // NumberFormatException 

をどのように私はStringパラメータでInteger.toHexString()の同じ機能を得ることができますし、 NumberFormatExceptionのためintパラメータがありません。プリミティブintlongの数値の制限を回避するために

+2

「Long.parseLong」についてはどうですか? –

+0

'Integer.toHexString()'は 'int'をとるので、動作しないと思います。 – javaPlease42

+1

その後、 'Long.toHexString'はどうですか? ;) –

答えて

1

入力値を任意に大きくすることができる場合、@dasblinkenlight's answerにはBigIntegerが含まれていることをお勧めします。お使いの値が2未満ある場合

しかし、その後、あなただけの代わりにIntegerLongを使用することができます。

String dec = "9999999999"; 
String hex = Long.toHexString(Long.parseLong(dec)); 
System.out.println(hex);        // 2540be3ff 

Live demo

+0

'Long'で十分であり、このコードはより洗練されています。 – javaPlease42

+0

@ javaPlease42 - FWIW、これと 'BigInteger'バージョンの間に清潔さに違いはないと思います。 –

3

使用BigInteger

BigInteger x = new BigInteger("9999999999999999999999"); // Default radix is 10 
String x16 = x.toString(16);        // Radix 16 indicates hex 
System.out.println(x16); 

クラスは便利な数の10進表現として解釈されますStringを取るコンストラクタを公開します。

Demo.

+0

私はLongには整数が提供しているものと非常に似た方法があることをお勧めします。 – GhostCat

+1

@GhostCatそうですが、 'long'を使うと限界をかなり押し上げるでしょう。しかし、限界は依然として存在し、OPはそれに遭遇しないように注意する必要があります。 – dasblinkenlight

+0

私はデモをチェックアウトしました。次に、https://www.rapidtables.com/convert/number/hex-to-decimal.htmlを使用して、16進数が正しいことを確認しました。これは良い解決策のようです。 – javaPlease42

-3

この方法を試してみてください:

String largeNumberAsAString = "9999999999"; 
    System.out.println(Integer.toHexString(BigDecimal.valueOf(Double.valueOf(largeNumberAsAString)).intValue())); 
0

使用Integer.parseUnsignedInt

数は、このように負のint型の範囲で、31^2を超えるが、2^32未満の場合、 をすることができますdo:

int n = Integer.parseUnsignedInt("CAFEBABE", 16); 

(ここでは16進数を使用していますが、それはわれわれがその範囲内にあることを簡単に示しているからです)

9_999_999_999はunsigned intの範囲を超えています。

+0

'9999999999'はどちらにも合わない... –

+0

@OliverCharlesworthかなり正しい;私はその言及を追加します。しかし、OPはintの2つの補集合の問題について言及しており、何らかの形でintに焦点を当てているようです。私は2^32について言及しましたが、それは2^31以上の整数の解です。 –

関連する問題