2016-04-17 10 views
0

したがって、Intストレージには大きすぎる数値を含む文字列を解析しようとしています。しかし、私はそれを分割しているので、文字列の値が必要です。文字列をLongに解析できますか?Javaでint型の数値が大きすぎる

n = Long.parseLong(string); 

そうですか?または、文字列を数値にする必要なく文字列を数値で区切る方法がありますか?私が使っているコードは、このようなものです:

private static String getFinished(String x, int y){ 
    int word = Integer.parseInt(x); 
    word = word/y; 

そして、私が使用している数は次のとおりです。1980715126555015951540148577071512651650 しかし、私は潜在的にさらに長い数字を使用している可能性があります。

+3

数値が2^63-1以下の場合は、「long」を使用できます。それよりも大きければ、 'BigInteger'を使います。もっと重要なのは、あなた自身で試してみてください –

+0

Upvoting ...なぜあなたは質問を投稿する必要があるかを知ることができる解決策(すでにそれを知っている)を見つけるのに十分な時間がかかりました。 – djechlin

答えて

3

文字列をLongに解析することはできますか?

はい。ただし、その数がそれほど大きくない場合に限ります。ロング/ロングの範囲は-9,223,372,036,854,775,808〜+ 9,223,372,036,854,775,807です。

もう1つの方法は、BigIntegerjavadoc)です。さらに大きな数字に対処することができます。私が使用しています(。BigIntegerの上限が最も可能性の高いあなたが利用可能なメモリの量によって決定される)

数は次のとおりです。1980715126555015951540148577071512651650

のBigIntegerが必要であること。例:

BigInteger small = new BigInteger("1980715126555015951540148577071512651650"); 
BigInteger notQuiteSoSmall = small.add(BigInteger.ONE); 

注:

  1. BigIntegerのオーバーロードなしオペレータはありません。明示的なメソッド呼び出しを使用する必要があります。
  2. BigIntegerオブジェクトはStringのオブジェクトです。すなわちそれらは不変である。算術方法では、新しいBigIntegerオブジェクトが生成されます。
+0

Intデータ型と同じ方法でBigIntegerを使用できますか? –

+0

@TheTwistyTie No. intとlongはプリミティブであり、直接使用することができます。 'BigInteger'は*不変の*オブジェクトなので、計算を行うメソッドを呼び出す必要があります。例えば。 'int =' i = i + 5'と言うことができますが、 'BigInteger'では' bi = bi.add(BigInteger.valueOf(5)) 'と答えなければなりません。 – Andreas

+0

いいえ、算術演算を行う。算術演算子のオーバーロードはありません。 –

0

いいえいいえ文字列を解析せずに数値に分割することはできません。

long num = Long.parseLong(str);は、try/catchブロックでラッピングするか、メソッドから例外をスローすることが条件です。

編集: 追加した文字列の例に基づいて、longはもう手伝ってくれないかもしれません。チェックBigInteger

+0

確かに、文字列を解析せずに数値に分割できます。面倒ですが、紙のように正確に行うことができます。 – Andreas

+0

ああ。しかし、bigdecimalはあなたのためにそれを内部的にすべて行います。なぜ車を改革するのですか? –

+0

私は同意します。ここで正しい選択は 'BigInteger'を使うことですが、私は最初の段落で作ったステートメントを単に縮約していました。それは間違っています。 – Andreas

1

あなたが探しているクラスはBigIntegerです。浮動小数点数の場合はBigDecimalです。

関連する問題