我有以下代码:
NumberFormat nf=NumberFormat.getInstance(Locale.FRANCE);
nf.setMinimumFractionDigits(3);
String s= nf.format(3456.32);
// double d= Double.valueOf(s); error here
System.out.println(s);
此代码显示:
3 456,320
直到现在它都很好,但想象一下,当我从JFormattedTextField获得相同的格式时,如何将“3 456,320”转换为字符串为double(3456.32)?
我已经尝试过这个:
String s="3 456,320";
double d= Double.valueOf(s);
但我收到错误......
修改:
经过多次测试后,我发现代码并不那么健壮,例如: //this works
String s="3456,6567";
NumberFormat nf1=NumberFormat.getInstance(Locale.FRANCE);
double d = (double) nf1.parse(s);
但是这一个:
String s="3456,0";
NumberFormat nf1=NumberFormat.getInstance(Locale.FRANCE);
double d = (double) nf1.parse(s);
我收到此错误:
通过利弊,我发现这非常强大:线程“main”中的异常java.lang.ClassCastException:java.lang.Long无法强制转换为java.lang.Double
double d = nf1.parse(s).doubleValue();
我们必须多次测试软件!!!
答案 0 :(得分:8)
再次尝试使用NumberFormat
。
NumberFormat nf=NumberFormat.getInstance(Locale.FRANCE);
String s = "3 456,320";
double d = nf.parse(s);
答案 1 :(得分:2)
这可能有效:
Double d = Double.valueOf("3 456,320".replace(" ", "").replace(",", "."));
(必须承认,有点脏)