Table of Contents
ToggleConvert String to Double in Java with Examples
將 String 轉換為 double 或 Double 是 Java 中常見的操作,可以使用 DecimalFormat 、 Apache Commons Lang 等方法進行操作, Convert a String to an Double in Java 任務是將該字串轉換為雙精度浮點數,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- conversion
| +- string
| +- StringToDoubleWithExamplesTest.java
單元測試
Convert a String to Double in Java 提供字串轉換成雙精度浮點數等操作。
decimalFormat
Convert a String to Double in Java 使用 DecimalFormat 轉換成雙精度浮點數。
@Test
public void decimalFormat() {
try {
String value = "460.88";
Number number = DecimalFormat.getNumberInstance().parse(value);
double result = number.doubleValue();
System.out.println(result);
assertEquals(460.88, result, 0);
value = "-50.88";
result = DecimalFormat.getNumberInstance().parse(value).doubleValue();
System.out.println(result);
assertEquals(-50.88, result, 0);
value = "-$1,250.88";
DecimalFormat format = new DecimalFormat("$#,##0.00");
format.setParseBigDecimal(true);
result = format.parse(value).doubleValue();
System.out.println(result);
assertEquals(-1250.88, result, 0);
} catch (ParseException ex) {
ex.printStackTrace();
}
}
460.88
-50.88
-1250.88
decimalFormatThrowException
Convert a String to Double in Java 使用 DecimalFormat 轉換成雙精度浮點數,輸入不合格式的字串,會拋出例外。
@Test
public void decimalFormatThrowException() {
try {
String value = "460.88";
Number number = DecimalFormat.getNumberInstance().parse(value);
double result = number.doubleValue();
System.out.println(result);
assertEquals(460.88, result, 0);
value = "bash-460.88";
result = DecimalFormat.getNumberInstance().parse(value).doubleValue();
System.out.println(result);
} catch (ParseException ex) {
ex.printStackTrace();
}
}
460.88
java.text.ParseException: Unparseable number: "bash-460.88"
at java.text.NumberFormat.parse(NumberFormat.java:385)
at org.ruoxue.java_147.string.StringToDoubleWithExamplesTest.decimalFormatThrowException(StringToDoubleWithExamplesTest.java:49)
constructor
Convert a String to Double in Java 使用 Double 建構子,傳入參數字串,建立一個新的 Double 物件。
@Test
public void constructor() {
String value = "460.88";
double result = new Double(value);
System.out.println(result);
assertEquals(460.88, result, 0);
value = "-50.88";
result = new Double(value);
System.out.println(result);
assertEquals(-50.88, result, 0);
}
460.88
-50.88
constructorThrowException
使用 Double 建構子,傳入參數字串,建立一個新的 Double 物件,輸入不合格式的字串,會拋出例外。
@Test(expected = NumberFormatException.class)
public void constructorThrowException() {
String value = "460.88";
double result = new Double(value);
System.out.println(result);
assertEquals(460.88, result, 0);
value = "bash-460.88";
result = new Double(value);
System.out.println(result);
}
460.88
java.lang.NumberFormatException: For input string: "bash-460.88"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at java.lang.Double.<init>(Double.java:608)
at org.ruoxue.java_147.string.StringToDoubleWithExamplesTest.constructorThrowException(StringToDoubleWithExamplesTest.java:77)
NumberUtils_toDouble
使用 Apache Commons Lang – NumberUtils 轉換成雙精度浮點數。
@Test
public void NumberUtils_toDouble() {
String value = "460.88";
double result = NumberUtils.toDouble(value);
System.out.println(result);
assertEquals(460.88, result, 0);
value = "-50.88";
result = NumberUtils.toDouble(value);
System.out.println(result);
assertEquals(-50.88, result, 0);
value = "50.88";
result = NumberUtils.toDouble(value, 0);
System.out.println(result);
assertEquals(50.88, result, 0);
value = "bash-460.88";
result = NumberUtils.toDouble(value, 0);
System.out.println(result);
assertEquals(0, result, 0);
}
460.88
-50.88
50.88
0.0
StringToDoubleWithExamplesTest.java
Java String to Double Examples 新增單元測試,驗證是否符合預期。
package org.ruoxue.java_147.conversion.string;
import static org.junit.Assert.*;
import java.text.DecimalFormat;
import java.text.ParseException;
import org.apache.commons.lang3.math.NumberUtils;
import org.junit.Test;
public class StringToDoubleWithExamplesTest {
@Test
public void decimalFormat() {
try {
String value = "460.88";
Number number = DecimalFormat.getNumberInstance().parse(value);
double result = number.doubleValue();
System.out.println(result);
assertEquals(460.88, result, 0);
value = "-50.88";
result = DecimalFormat.getNumberInstance().parse(value).doubleValue();
System.out.println(result);
assertEquals(-50.88, result, 0);
value = "-$1,250.88";
DecimalFormat format = new DecimalFormat("$#,##0.00");
format.setParseBigDecimal(true);
result = format.parse(value).doubleValue();
System.out.println(result);
assertEquals(-1250.88, result, 0);
} catch (ParseException ex) {
ex.printStackTrace();
}
}
@Test
public void decimalFormatThrowException() {
try {
String value = "460.88";
Number number = DecimalFormat.getNumberInstance().parse(value);
double result = number.doubleValue();
System.out.println(result);
assertEquals(460.88, result, 0);
value = "bash-460.88";
result = DecimalFormat.getNumberInstance().parse(value).doubleValue();
System.out.println(result);
} catch (ParseException ex) {
ex.printStackTrace();
}
}
@Test
public void constructor() {
String value = "460.88";
double result = new Double(value);
System.out.println(result);
assertEquals(460.88, result, 0);
value = "-50.88";
result = new Double(value);
System.out.println(result);
assertEquals(-50.88, result, 0);
}
@Test(expected = NumberFormatException.class)
public void constructorThrowException() {
String value = "460.88";
double result = new Double(value);
System.out.println(result);
assertEquals(460.88, result, 0);
value = "bash-460.88";
result = new Double(value);
System.out.println(result);
}
@Test
public void NumberUtils_toDouble() {
String value = "460.88";
double result = NumberUtils.toDouble(value);
System.out.println(result);
assertEquals(460.88, result, 0);
value = "-50.88";
result = NumberUtils.toDouble(value);
System.out.println(result);
assertEquals(-50.88, result, 0);
value = "50.88";
result = NumberUtils.toDouble(value, 0);
System.out.println(result);
assertEquals(50.88, result, 0);
value = "bash-460.88";
result = NumberUtils.toDouble(value, 0);
System.out.println(result);
assertEquals(0, result, 0);
}
}
心得分享
Convert a String to an Double in Java with Examples 將 String 實例轉換為 double 或 Double 實例的多種方法, 除了使用 Java 所提供的 DecimalFormat 、 constructor 之外,也有其他選擇使用外部程式庫來轉換成 double ,像是 Apache Commons Lang 等, Java String to Double Examples 提供了幾種常見方法的操作範例。