我有一个错误或什么的。我有一个保存文章的方法,如下所示:
class SaveArticleListener implements ActionListener {
//....
String s = textArticlePrice.getText().replace(',','.').replaceAll("\\s","");
double price = Double.parseDouble(s);
//....
}
其中textArticlePrice
是JFormattedTextField
,配置如下:
NumberFormat priceFormat = NumberFormat.getNumberInstance();
priceFormat.setMaximumFractionDigits(2);
priceFormat.setMinimumFractionDigits(2);
textArticlePrice = new JFormattedTextField(priceFormat);
textArticlePrice.setColumns(10);
我每次都会得到parseDouble
方法:
java.lang.NumberFormatException: For input string: "123 456 789.00"
所以replace
适用于点,但不适用于空白......为什么?
答案 0 :(得分:1)
您最好使用NumberFormat
来解析String
。保留对priceFormat
的引用,然后使用
double price = priceFormat.parse(textArticlePrice.getText()).doubleValue();
用于显示数字的格式化程序与用于将其重新转换为double
的格式化程序相同,因此您知道它将以兼容的方式解析它
最重要的是
double price = ((Number) textArticlePrice.getValue()).doubleValue();
如果您已正确设置JFormattedTextField
,则无需转换即可使用。 (getValue()
调用会返回Object
,因此您需要投放它。它可能会返回Double
或Long
,具体取决于文本中的内容字段,所以从中获取double
的安全方法是将其视为Number
,这是两者的超类型,并调用其.doubleValue()
方法。)
编写将其转换为可由Double.parseDouble()
解析的内容的内容实际上不是正确的方法,因为如果文本字段的格式在以后发生更改,它就太脆弱了。
答案 1 :(得分:0)
关于你的问题“为什么它不适用于空白区域”。白色空格就像a,l,#,?,¡,但它只能识别,12345,数字一起作为数字,你不能使一个int变量'int number = 1 234;它与解析相同。而是尝试,
s = s.replace(',','.');
s = s.replace(" ","");
Price = Double.parseDouble(s);
假设'123 456 789.00'是一个数字。
如果有帮助,请发表评论。
答案 2 :(得分:0)
我现在这样做了,它运作良好
String strNumber = "1 2 3 4 5 6.789";
double DblNumber = Double.parseDouble(strNumber);
System.out.Println(DblNumber);// this displays the number if your IDE has an output window