我有窃听器什么的。我有一个保存文章的方法,如下所示:
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用的是点,而不是空格.为什么?
发布于 2014-10-08 18:50:42
最好使用您的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()解析的东西确实不是正确的方法,因为如果您的文本字段的格式稍后发生变化,它太脆弱了。
发布于 2014-10-08 19:52:00
关于你的问题“为什么它不适用于空白”。空格是字符,就像a,l,#,?,“,但是它只识别12345,数字加在一起是一个数字,你不能让一个int变量'int号=1234;这和解析一样。
s = s.replace(',','.');
s = s.replace(" ","");
Price = Double.parseDouble(s);假设‘123456 789.00’是一个数字。
如果这有帮助,请发表评论。
发布于 2014-10-08 20:26:14
我现在就做了,效果很好
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 windowhttps://stackoverflow.com/questions/26264188
复制相似问题