Convertir una cadena en doble – Java

¿Cuál es la forma más fácil y correcta de convertir un número de cadena con comas (por ejemplo: 835,111.2) en una instancia doble?

Gracias.

Lo más fácil no es siempre lo más correcto. Aquí está lo más fácil:

 String s = "835,111.2"; // NumberFormatException possible. Double d = Double.parseDouble(s.replaceAll(",","")); 

No me he molestado con las configuraciones regionales ya que especificaste que querías reemplazar las comas, así que supongo que ya te has establecido como una configuración regional con coma el separador de miles y el período es el separador decimal. Aquí hay mejores respuestas si quiere un comportamiento correcto (en términos de internacionalización).

Use java.text.DecimalFormat:

DecimalFormat es una subclase concreta de NumberFormat que formatea números decimales. Tiene una variedad de funciones diseñadas para que sea posible analizar y formatear números en cualquier localidad, incluido el soporte de dígitos occidentales, árabes e índicos. También admite diferentes tipos de números, incluidos números enteros (123), números de punto fijo (123.4), notación científica (1.23E4), porcentajes (12%) y montos de divisa ($ 123). Todos estos pueden ser localizados.

Un enlace puede decir más de mil palabras

 // Format for CANADA locale Locale locale = Locale.CANADA; String string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1,234.56 // Format for GERMAN locale locale = Locale.GERMAN; string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1.234,56 // Format for the default locale string = NumberFormat.getNumberInstance().format(-1234.56); // Parse a GERMAN number try { Number number = NumberFormat.getNumberInstance(locale.GERMAN).parse("-1.234,56"); if (number instanceof Long) { // Long value } else { // Double value } } catch (ParseException e) { } 
  There is small method to convert german price format public static BigDecimal getBigDecimalDe(String preis) throws ParseException { NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); Number number = nf.parse(preis); return new BigDecimal(number.doubleValue()); } ---------------------------------------------------------------------------- German format BigDecimal Preis into decimal format ---------------------------------------------------------------------------- public static String decimalFormat(BigDecimal Preis){ String res = "0.00"; if (Preis != null){ NumberFormat nf = NumberFormat.getInstance(Locale.GERMANY); if (nf instanceof DecimalFormat) { ((DecimalFormat) nf).applyPattern("###0.00"); } res = nf.format(Preis); } return res; } --------------------------------------------------------------------------------------- /** * This method converts Deutsche number format into Decimal format. * @param Preis-String parameter. * @return */ public static BigDecimal bigDecimalFormat(String Preis){ //MathContext mi = new MathContext(2); BigDecimal bd = new BigDecimal(0.00); if (!Util.isEmpty(Preis)){ try { // getInstance() obtains local language format NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); nf.setMinimumFractionDigits(2); nf.setMinimumIntegerDigits(1); nf.setGroupingUsed(true); java.lang.Number num = nf.parse(Preis); double d = num.doubleValue(); bd = new BigDecimal(d); } catch (ParseException e) { e.printStackTrace(); } }else{ bd = new BigDecimal(0.00); } //Rounding digits return bd.setScale(2, RoundingMode.HALF_UP); }