用Java处理INR货币的正确方法

时间:2019-02-12 08:52:20

标签: java number-formatting

我有这个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"
那么我该如何正确使用货币呢?

1 个答案:

答案 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()返回的值。