首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JFormattedTextField解析双

从JFormattedTextField解析双
EN

Stack Overflow用户
提问于 2014-10-08 18:45:16
回答 3查看 878关注 0票数 0

我有窃听器什么的。我有一个保存文章的方法,如下所示:

代码语言:javascript
复制
  class SaveArticleListener implements ActionListener {
    //....
    String s = textArticlePrice.getText().replace(',','.').replaceAll("\\s","");
    double price = Double.parseDouble(s);
    //....
}

其中textArticlePrice是配置如下所示的JFormattedTextField

代码语言:javascript
复制
NumberFormat priceFormat = NumberFormat.getNumberInstance();
priceFormat.setMaximumFractionDigits(2);
priceFormat.setMinimumFractionDigits(2);
textArticlePrice = new JFormattedTextField(priceFormat);
textArticlePrice.setColumns(10);

parseDouble方法中,我每次都得到:

代码语言:javascript
复制
java.lang.NumberFormatException: For input string: "123 456 789.00"

所以replace用的是点,而不是空格.为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-08 18:50:42

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

代码语言:javascript
复制
double price = priceFormat.parse(textArticlePrice.getText()).doubleValue();

用来显示数字的格式化程序是相同的,然后将其转换回double,这样您就知道它将以兼容的方式解析它。

最棒的是

代码语言:javascript
复制
double price = ((Number) textArticlePrice.getValue()).doubleValue();

如果您已经正确地设置了JFormattedTextField,那么它应该可以工作,而无需进行任何转换。( getValue()调用返回一个Object,因此您需要转换它。它可能返回一个Double或一个Long,这取决于文本字段中的内容,因此获取double的安全方法是将其视为Number (这两者都是超级类型),并调用其.doubleValue()方法。)

编写将其转换为可以由Double.parseDouble()解析的东西确实不是正确的方法,因为如果您的文本字段的格式稍后发生变化,它太脆弱了。

票数 1
EN

Stack Overflow用户

发布于 2014-10-08 19:52:00

关于你的问题“为什么它不适用于空白”。空格是字符,就像a,l,#,?,“,但是它只识别12345,数字加在一起是一个数字,你不能让一个int变量'int号=1234;这和解析一样。

代码语言:javascript
复制
s = s.replace(',','.');
s = s.replace(" ","");
Price = Double.parseDouble(s);

假设‘123456 789.00’是一个数字。

如果这有帮助,请发表评论。

票数 0
EN

Stack Overflow用户

发布于 2014-10-08 20:26:14

我现在就做了,效果很好

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26264188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档