HOWTO · Java

如何在 Java 中把字串轉換為雙數

本文介紹了將字串轉換為雙精度值並處理 NumberFormatException 的各種方法。

我們將通過一些簡單易懂的例子介紹在 Java 中把給定的字串轉換為雙精度 Double 的不同方法。

Double.parseDouble() 將字串轉換為 Double 的方法

在 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);
  }
}

輸出:

Converted negative value: -12.34
Converted positive value: 12.34

Double.valueOf() 將字串轉換為 Double 的方法

當我們需要一個 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 類可以返回 intbyte 等不同的值,所以需要在 try-catch 塊中進行所有操作。

但由於 DecimalFormat 類可以返回不同的值,如 intbyte,所以需要在 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

將字串值轉換為雙精度值 Double 時處理 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