从JFormattedTextField解析double

时间:2014-10-08 18:45:17

标签: java regex swing jformattedtextfield

我有一个错误或什么的。我有一个保存文章的方法,如下所示:

  class SaveArticleListener implements ActionListener {
    //....
    String s = textArticlePrice.getText().replace(',','.').replaceAll("\\s","");
    double price = Double.parseDouble(s);
    //....
}

其中textArticlePriceJFormattedTextField,配置如下:

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适用于点,但不适用于空白......为什么?

3 个答案:

答案 0 :(得分:1)

您最好使用NumberFormat来解析String。保留对priceFormat的引用,然后使用

double price = priceFormat.parse(textArticlePrice.getText()).doubleValue();

用于显示数字的格式化程序与用于将其重新转换为double的格式化程序相同,因此您知道它将以兼容的方式解析它

最重要的是

double price = ((Number) textArticlePrice.getValue()).doubleValue();

如果您已正确设置JFormattedTextField,则无需转换即可使用。 (getValue()调用会返回Object,因此您需要投放它。它可能会返回DoubleLong,具体取决于文本中的内容字段,所以从中获取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