1. Overview
1.概述
In this tutorial, we’ll cover many ways of converting a String into a double in Java.
在本教程中,我们将介绍在Java中把String转换为double的多种方法。
2. Double.parseDouble
2.Double.parseDouble
We can convert a String to a double using the Double.parseDouble method:
我们可以使用Double.parseDouble方法将String转换成double。
assertEquals(1.23, Double.parseDouble("1.23"), 0.000001);
3. Double.valueOf
3.Double.valueOf
Similarly, we can convert a String into a boxed Double using the Double.valueOf method:
类似地,我们可以使用Double.valueOf方法将String转换为boxedDouble。
assertEquals(1.23, Double.valueOf("1.23"), 0.000001);
Note that the returned value of Double.valueOf is a boxed Double. Since Java 5, this boxed Double is converted by the compiler to a primitive double where needed.
请注意,Double.valueOf的返回值是一个带框的Double。从 Java 5 开始,这个带框的 Double 会在需要时被编译器转换为原始 double。
In general, we should favor Double.parseDouble since it does not require the compiler to perform auto-unboxing.
一般来说,我们应该支持Double.parseDouble,因为它不需要编译器进行自动解盒。
4. DecimalFormat.parse
4、DecimalFormat.parse
When a String representing a double has a more complex format, we can use a DecimalFormat.
当代表double的String有一个更复杂的格式时,我们可以使用DecimalFormat。
For example, we can convert a decimal-based currency value without removing non-numeric symbols:
例如,我们可以在不去除非数字符号的情况下转换基于十进制的货币值。
DecimalFormat format = new DecimalFormat("\u00A4#,##0.00");
format.setParseBigDecimal(true);
BigDecimal decimal = (BigDecimal) format.parse("-$1,000.57");
assertEquals(-1000.57, decimal.doubleValue(), 0.000001);
Similar to the Double.valueOf, the DecimalFormat.parse method returns a Number, which we can convert to a primitive double using the doubleValue method. Additionally, we use the setParseBigDecimal method to force DecimalFormat.parse to return a BigDecimal.
与Double.valueOf类似,DecimalFormat.parse方法返回一个Number,我们可以使用doubleValue方法将其转换为一个原始的Double。此外,我们使用setParseBigDecimal方法来强制DecimalFormat.parse返回一个BigDecimal。
Usually, the DecimalFormat is more advanced than we require, thus, we should favor the Double.parseDouble or the Double.valueOf instead.
通常,DecimalFormat比我们要求的更高级,因此,我们应该倾向于使用Double.parseDouble或Double.valueOf来代替。
To learn more about DecimalFormat, please check a practical guide to DecimalFormat.
要了解更多关于DecimalFormat的信息,请查看DecimalFormat的实用指南。
5. Invalid Conversions
5.无效的转换
Java provides a uniform interface for handling invalid numeric Strings.
Java提供了一个统一的接口来处理无效的数字Strings。
Notably, Double.parseDouble, Double.valueOf, and DecimalFormat.parse throw a NullPointerException when we pass null.
值得注意的是,Double.parseDouble、Double.valueOf和DecimalFormat.parse当我们传递null时,会抛出NullPointerException。
Likewise, Double.parseDouble and Double.valueOf throw a NumberFormatException when we pass an invalid String that cannot be parsed to a double (such as &).
同样,Double.parseDouble和Double.valueOf在我们传递一个不能被解析为double的无效字符串(如&)时,会抛出NumberFormatException。
Lastly, DecimalFormat.parse throws a ParseException when we pass an invalid String.
最后,DecimalFormat.parse当我们传递一个无效的String.时,抛出一个ParseException。
6. Avoiding Deprecrated Conversions
6.避免退化的转换</b
Before Java 9, we could create a boxed Double from a String by instantiating a Double:
在Java 9之前,我们可以通过实例化一个Double,从String创建一个盒式Double。
new Double("1.23");
As of version 9, Java officially deprecated this method.
从版本9开始,Java正式废除了这个方法。
7. Conclusion
7.结论
In conclusion, Java provides us with multiple methods to convert Strings into double values.
总之,Java为我们提供了多种方法来将Strings转换成double值。
In general, we recommend using Double.parseDouble unless a boxed Double is needed.
一般来说,我们推荐使用Double.parseDouble,除非需要一个带框的Double。
The source code for this article, including examples, can be found over on GitHub.
这篇文章的源代码,包括例子,可以在GitHub上找到over。