Подтвердить что ты не робот

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

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

Спасибо.

4b9b3361

Ответ 1

Посмотрите 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");

Ответ 2

Самый простой не всегда самый правильный. Здесь самый простой:

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

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

Ответ 3

Использовать java.text.DecimalFormat:

DecimalFormat - это конкретный подкласс of NumberFormat, который форматирует десятичную номера. Он имеет множество функций предназначенный для того, чтобы можно было анализировать и номера формата в любой локали, включая поддержку западных, арабских, и индикаторы. Он также поддерживает различные виды номеров, в том числе целые числа (123), числа с фиксированной запятой (123.4), научная нотация (1.23E4), проценты (12%) и валюта суммы (123 долл. США). Все это может быть локализованы.

Ответ 4

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

// 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) {
}

Ответ 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);

    }