HOWTO · Java

Java で文字列をダブルに変換する方法

この記事では、文字列をダブル値に変換するための様々な方法や NumberFormatException の対処法を紹介しています。

このページの内容

Java で与えられた文字列をダブルに変換する様々な方法を、わかりやすい例を交えて紹介します。

文字列をダブルに変換する Double.parseDouble() メソッド

Java で文字列を double にキャストする最も簡単で最良の方法は、クラス Double の静的メソッド parseDouble を用いることです。

Double.parseDouble はプリミティブ型を返します。

public class Main {
  public static void main(String[] args) {
    String stringValue = "12.34";

    double doubleValue = Double.parseDouble(stringValue);
    System.out.println("Converted value: " + doubleValue);
  }
}

出力:

Converted value: 12.34

このメソッドは文字列を正しく double にパースします。

public class Main {
  public static void main(String[] args) {
    String stringValueNegative = "-12.34";
    String stringValuePositive = "+12.34";
    double doubleValueNegative = Double.parseDouble(stringValueNegative);
    double doubleValuePositive = Double.parseDouble(stringValuePositive);

    System.out.println("Converted negative value: " + doubleValueNegative);
    System.out.println("Converted positive value: " + doubleValuePositive);
  }
}

このメソッドは文字列を正しく解析して double に変換します。

Converted negative value : -12.34 Converted positive value : 12.34

Double.valueOf() 文字列をダブルに変換するメソッド

プリミティブ型の double の代わりに Double オブジェクトが必要な場合、Double.valueOf メソッドを用いて文字列から double オブジェクトの値を取得することができます。

public class Main {
  public static void main(String[] args) {
    String stringValueNegative = "-12.08d";
    String stringValuePositive = "+12.3400";

    Double doubleValueNegative = Double.valueOf(stringValueNegative);
    Double doubleValuePositive = Double.valueOf(stringValuePositive);
    System.out.println(doubleValueNegative);
    System.out.println(doubleValuePositive);
  }
}

出力:

-12.08
12.34

文字列をダブルに変換するには DecimalFormat.parse を使用する

欲しい値が 1,11,111.12d のようなものであれば、DecimalFormat クラスを使って文字列を解析して doubleValue() にすることができます。

しかし、DecimalFormat クラスは int や byte のような異なる値を返すことができるので、try-catch ブロックですべての操作を行う必要があります。また、doubleValue が欲しい場合は doubleValue() メソッドを用いて double 型を確定的に取得しなければならません。

import java.text.DecimalFormat;
import java.text.ParseException;

public class Main {
  public static void main(String[] args) {
    String stringValue = "1,11,111.12d";

    try {
      double doubleValue = DecimalFormat.getNumberInstance().parse(stringValue).doubleValue();
      System.out.println(doubleValue);

    } catch (ParseException e) {
      e.printStackTrace();
    }
  }
}

出力:

111111.12

文字列の値をダブル値に変換する際の NumberFormatException の処理

ときどき NumberFormatException が発生することがあります。これは文字列の値が有効な二重値ではないために発生します。

より明確にするために、この例外をスローする簡単な例を見てみましょう。

public class Main {
  public static void main(String[] args) {}
  String stringValue = "1,11";

  double d = Double.parseDouble(stringValue);
  System.out.println(d);
}
}

出力:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1,11"
	at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
	at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
	at java.base/java.lang.Double.parseDouble(Double.java:543)
	at com.company.Main.main(Main.java:14)

この例外は 1,11 が有効な二重値ではないために発生します。このエラーを解決するには、以下のようにカンマを小数点に置き換える必要があります。

public class Main {
  public static void main(String[] args) {
    String stringValue = "1,11";

    double d = Double.parseDouble(stringValue.replace(",", "."));
    System.out.println(d);
  }
}

出力:

1.11