我有这个INR代码
long tenderedAmt = (long) NumberFormat.getNumberInstance(new Locale("en", "in")).parse(jAmtTenderedFormattedTextField.getText());`
但是当我输入金额00.50时,抛出异常
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long
使用Double
Double tenderedAmt = (Double) NumberFormat.getNumberInstance(new Locale("en", "in")).parse(jAmtTenderedFormattedTextField.getText());
此代码段引发相同的异常。
使用
Double tenderedAmt = (Double) jAmtTenderedFormattedTextField.getText());
在上面的代码段中,如果我输入了1000.00,它应该是1.00,而不是千。
扔
java.lang.NumberFormatException: For input string: "1,000.00"
那么我该如何正确使用货币呢?
答案 0 :(得分:2)
Here's parse
方法的javadoc,它的意思是:
从给定字符串的开头解析文本以产生一个 数。该方法可能不会使用给定字符串的整个文本。
因此,如果我们将结果分配为Number
类型,它应该给我们正确的值,例如:
Number result = NumberFormat.getNumberInstance(new Locale("en", "in")).parse("1000.00");
System.out.println(result.doubleValue());
这应该按预期打印1000.0
。另外,我们不需要将此cast
转换为任何类型。我们可以简单地调用doubleValue()
或longValue()
或任何其他xxxValue()
来获取相应的类型。
如果它打印1.0
,那么我建议检查jAmtTenderedFormattedTextField.getText()
返回的值。