web-dev-qa-db-ja.com

Javaで文字列を数値に変換する

Java(たとえば、int、long、doubleなど))の任意の有効な数値である場合、文字列を抽象的な数値に変換するにはどうすればよいですか?.

文字列内の数値のタイプがわからないため、特定のプリミティブ解析(Integer.parseInt、Long.parseLongなど)を使用できません。それを変換する一般的な方法はありますか?

例えば:

  • 文字列->数値
  • "23423"-> 23423
  • 「34.3」-> 34.3
  • "45364573747546"-> 45364573747546
7
Lakshan Prabhu

NumberFormatを使用します。数値は抽象クラスであるため、インスタンス化できません。

 Number number = NumberFormat.getInstance().parse(string);
9
minigeek

Doubleは、長すぎると値の精度が失われます。

代わりにBigDecimalを使用してください:

BigDecimal number = new BigDecimal("43.256");

その後、次のようなさまざまなプリミティブを取得できます。

try {
  int intValue = number.intValueExact();
} catch (ArithmeticException e) {
  try {
    long longValue = number.longValueExact();
  } catch (ArithmeticException e) {
    double doubleValue = number.doubleValue();
  }
}
1

2つのケース:

  1. 入力文字列が8バイト未満の場合:

double primitiveNumber = Double.parseDouble(input);

  1. 入力文字列が8バイトを超える場合:とにかくそれをプリミティブに格納できない場合は、Numberクラスを使用できますが、プリミティブを想定しているため、これは起こりそうにありません。
1
Sandeep

Double.parseDouble() を使用して、文字列をdoubleに変換できます。これは、文字列が整数の場合でも機能します。

String myString = "1234.56";
double myDouble = Double.parseDouble(myString);

整数か倍数かを確認する必要がある場合:

String myString = "1234.56";
int myInt;
double myDouble = Double.parseDouble(myString);
if ((myDouble % 1) == 0) {
   myInt = (int) myDouble;
   System.out.println("myString is an integer: " + myInt );       
} else {
   System.out.println("myString is a double: " + myDouble );    
}

または、 Guava'sDoubleMath.isMathematicalInteger() を使用できます。

String myString = "1234.56";
int myInt;
double myDouble = Double.parseDouble(myString);
if (DoubleMath.isMathematicalInteger(myDouble)) {
   myInt = (int) myDouble;
   System.out.println("myString is an integer: " + myInt );       
} else {
   System.out.println("myString is a double: " + myDouble );    
}
0
Varejones

文字列が大きな数である限り(プリミティブなlongおよびdoubleより長くないと想定)、一般的な方法はそれが長いかdoubleかを決定できます。

Number n = Double.valueOf(string);
if((double)n.intValue() == n.doubleValue()){
   //n is double use n.doubleValue() or just use the n for generic purposes
}
else{
   //n is int use n.intValue() or just use the n for generic purposes
}
0
Arsen Alexanyan

Double.valueOf()は、数値が非常に長い場合を除き、正常に機能します。

0
sssemil

私はBigDecimalだけを好みます。サイズや精度の問題がないので

0
ravip

これを行う最も簡単な方法は、常にDouble.parseDouble()を使用することです。常に同じタイプを使用するのではなく、使用するプリミティブを決定する汎用パーサーが必要な場合は、独自のパーサーを作成する必要があります。これを行う1つの方法は、各parseXxx()メソッドと多数のtry...catchステートメントを使用することです。

0
Code-Apprentice

整数の場合:

int myInteger = Integer.parseInt("23423");

ダブルの場合:

double myDouble = Double.parseDouble("34.3");
0