用逗号作为小数分隔符的parseDouble的最佳方法是什么?

问题

以下是结果:aException

String p="1,234";
Double d=Double.valueOf(p); 
System.out.println(d);

是否有更好的方法解析"1,234"到get1.234than:p = p.replaceAll(",",".");


#1 热门回答(163 赞)

Usejava.text.NumberFormat

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
    Number number = format.parse("1,234");
    double d = number.doubleValue();

#2 热门回答(53 赞)

你可以使用此(法语区域设置has,for decimal decimal)

NumberFormat nf = NumberFormat.getInstance(Locale.FRANCE);
nf.parse(p);

或者你可以使用java.text.DecimalFormat并设置相应的符号:

DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator(' ');
df.setDecimalFormatSymbols(symbols);
df.parse(p);

#3 热门回答(16 赞)

正如E-Riz指出的那样,NumberFormat.parse(String)将"1,23abc"解析为1.23。要获取整个输入,我们可以使用:

public double parseDecimal(String input) throws ParseException{
  NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.getDefault());
  ParsePosition parsePosition = new ParsePosition(0);
  Number number = numberFormat.parse(input, parsePosition);

  if(parsePosition.getIndex() != input.length()){
    throw new ParseException("Invalid input", parsePosition.getIndex());
  }

  return number.doubleValue();
}