Преобразовать строку в двойную - Java

Какой самый простой и правильный способ преобразовать число String с запятыми (например: 835,111.2) в экземпляр Double.

Благодарю.

Ответы на вопрос(5)

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

    }

DecimalFormat is a concrete subclass of NumberFormat that formats decimal numbers. It has a variety of features designed to make it possible to parse and format numbers in any locale, including support for Western, Arabic, and Indic digits. It also supports different kinds of numbers, including integers (123), fixed-point numbers (123.4), scientific notation (1.23E4), percentages (12%), and currency amounts ($123). All of these can be localized.

Ссылка может сказать более тысячи слов

// Format for CANADA locale
Locale locale = Locale..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) {
}
 03 дек. 2012 г., 16:02
Хороший вопрос, использовалway back machine и скопировал пример
 01 дек. 2012 г., 02:32
неработающая ссылка не может
Решение Вопроса

java.text.NumberFormat, Например:

import java.text.*;
import java.util.*;

public class Test
{
    // Just for the sake of a simple test program!
    public static void main(String[] args) throws Exception
    {
        NumberFormat format = NumberFormat.getInstance(Locale.US);

        Number number = format.parse("835,111.2");
        System.out.println(number); // or use number.doubleValue()
    }
}

В зависимости от того, какое количество вы используете, вы можете проанализироватьBigDecimal вместо. Самый простой способ сделать это, вероятно:

BigDecimal value = new BigDecimal(str.replace(",", ""));

или использоватьDecimalFormat сsetParseBigDecimal(true):

DecimalFormat format = (DecimalFormat) NumberFormat.getInstance(Locale.US);
format.setParseBigDecimal(true);
BigDecimal number = (BigDecimal) format.parse("835,111.2");
 10 мар. 2010 г., 10:22
@Tadeusz: речь идет конкретно о «числах с запятыми»; - не «номера в текущей локали». Когда вопрос конкретный, имеет смысл, чтобы ответ был конкретным. Что касается NumberFormat.getInstance, потенциально не возвращающего DecimalFormat - да, это возможно. Я не уверен, что лучше всего обойти это, если честно; API там не особенно полезен :(
 13 сент. 2012 г., 20:47
хорошо. очень полезно
 10 мар. 2010 г., 10:19
Уверены ли выNumberFormat.getInstance всегда будет возвращать экземплярDecimalFormat, И разве ручная замена запятых на точки не разрушает саму идею локализации?

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

Я не беспокоился о локалях, так как вы специально указали, что хотите заменить запятые, поэтому я предполагаю, что вы уже зарекомендовали себя как локаль с запятой как разделитель тысяч, а точка - как десятичный разделитель. Здесь есть лучшие ответы, если вы хотите правильного (с точки зрения интернационализации) поведения.

Ваш ответ на вопрос