将字符串转换为Double - Java

时间:2009-07-08 10:48:28

标签: java format

将带逗号的字符串数字(例如:835,111.2)转换为Double实例的最简单,最正确的方法是什么。

感谢。

5 个答案:

答案 0 :(得分:47)

看看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(",", ""));

或使用DecimalFormatsetParseBigDecimal(true)

DecimalFormat format = (DecimalFormat) NumberFormat.getInstance(Locale.US);
format.setParseBigDecimal(true);
BigDecimal number = (BigDecimal) format.parse("835,111.2");

答案 1 :(得分:10)

最简单的并不总是最正确的。这是最简单的:

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

我没有对语言环境感到烦恼,因为你明确表示你想要删除逗号,所以我假设你已经将自己建立为逗号是一个区域设置,逗号是千位分隔符,句点是小数分隔符。如果你想要正确的(在国际化方面)行为,那么这里有更好的答案。

答案 2 :(得分:5)

使用java.text.DecimalFormat:

  

DecimalFormat是一个具体的子类   NumberFormat格式化十进制   数字。它有各种功能   旨在使解析成为可能   和格式化任何语言环境中的数字,   包括对西方,阿拉伯语的支持,   和印度数字。它也支持   不同种类的数字,包括   整数(123),定点数   (123.4),科学记数法(1.23E4),   百分比(12%)和货币   金额(123美元)。所有这些都可以   本地化。

答案 3 :(得分:2)

A link can say more than thousand words

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

答案 4 :(得分:1)

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

    }