以下是导致Exception:
String p="1,234";
Double d=Double.valueOf(p);
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来解析"1,234"得到1.234:p = p.replaceAll(",",".");?
dog*_*ane 195
NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 61
您可以使用此(法语区域设置具有,小数分隔符)
NumberFormat nf = NumberFormat.getInstance(Locale.FRANCE);
nf.parse(p);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用java.text.DecimalFormat和设置适当的符号:
DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator(' ');
df.setDecimalFormatSymbols(symbols);
df.parse(p);
Run Code Online (Sandbox Code Playgroud)
dgo*_*ive 17
正如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();
}
Run Code Online (Sandbox Code Playgroud)
小智 6
Double.parseDouble(p.replace(',','.'))
Run Code Online (Sandbox Code Playgroud)
...在以char-by-char为基础搜索基础字符数组时非常快.字符串替换版本编译RegEx以进行评估.
基本上替换(char,char)大约快10倍,因为你将在低级代码中做这些事情,所以考虑这个是有意义的.热点优化器无法弄明白......当然不在我的系统上.
小智 5
如果您不知道正确的语言环境并且字符串可以有千位分隔符,这可能是最后的手段:
doubleStrIn = doubleStrIn.replaceAll("[^\\d,\\.]++", "");
if (doubleStrIn.matches(".+\\.\\d+,\\d+$"))
return Double.parseDouble(doubleStrIn.replaceAll("\\.", "").replaceAll(",", "."));
if (doubleStrIn.matches(".+,\\d+\\.\\d+$"))
return Double.parseDouble(doubleStrIn.replaceAll(",", ""));
return Double.parseDouble(doubleStrIn.replaceAll(",", "."));
Run Code Online (Sandbox Code Playgroud)
请注意:这会很高兴地将诸如“R 1 52.43,2”之类的字符串解析为“15243.2”。
| 归档时间: |
|
| 查看次数: |
155428 次 |
| 最近记录: |