Convertendo Java String para Double
1. Visão geral
Neste tutorial, cobriremos muitas maneiras de converter aString emdouble em Java.
2. Double.parseDouble
Podemos converterString emdouble usando o métodoDouble.parseDouble:
assertEquals(1.23, Double.parseDouble("1.23"), 0.000001);
3. Double.valueOf
Da mesma forma, podemos converter umString em umboxed Double usando o métodoDouble.valueOf:
assertEquals(1.23, Double.valueOf("1.23"), 0.000001);
Observe que o valor retornado deDouble.valueOf é umDouble em caixa. Desde o Java 5, esteDouble em caixa é convertido pelo compilador emdouble primitivo quando necessário.
Em geral,we should favor Double.parseDouble, pois não requer que o compilador execute o desempacotamento automático.
4. DecimalFormat.parse
Quando umString representando umdouble tem um formato mais complexo, podemos usar umDecimalFormat.
Por exemplo, podemos converter um valor de moeda baseado em decimal sem remover símbolos não numéricos:
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);
Semelhante aoDouble.valueOf, oDecimalFormat.parse method returns a Number, que podemos converter em umdouble primitivo usando o métododoubleValue. Além disso, usamos o métodosetParseBigDecimal para forçarDecimalFormat.parse a retornar umBigDecimal.
Normalmente, oDecimalFormat é mais avançado do que exigimos, portanto, devemos preferirDouble.parseDouble ouDouble.valueOf.
Para saber mais sobreDecimalFormat, verifiquea practical guide to DecimalFormat.
5. Conversões Inválidas
Java fornece uma interface uniforme para lidar comStrings numéricos inválidos.
Notavelmente,Double.parseDouble, Double.valueOf, and DecimalFormat.parse throw a NullPointerException quando passamosnull.
Da mesma forma,Double.parseDouble and Double.valueOf throw a NumberFormatException quando passamos uma String inválida que não pode ser analisada emdouble (como&).
Por fim,DecimalFormat.parse throws a ParseException quando passamos umString. inválido
6. Evitando conversões depreciadas
Antes do Java 9, podíamos criar umDouble em caixa a partir deString instanciando umDouble:
new Double("1.23");
A partir da versão 9, o Java oficialmente reprovou esse método.
7. Conclusão
Em conclusão, Java nos fornece vários métodos para converterStrings em valoresdouble.
Em geral, recomendamos o uso deDouble.parseDouble, a menos que umDouble em caixa seja necessário.
O código-fonte deste artigo, incluindo exemplos, pode ser encontradoover on GitHub.