当十进制为 0 时 DecimalFormat.parse() 的转换结果时发生 ClassCastException
ClassCastException when casting result of DecimalFormat.parse() when decimal is 0
我正在使用 DecimalFormat
来处理来自不同语言环境的数字格式。我的 DecimalFormat
变量声明如下:
NumberFormat m_nf;
DecimalFormat m_df;
if (strCountry.equals("IT") || strCountry.equals("ES"))
locale = java.util.Locale.ITALIAN;
else
locale = java.util.Locale.ENGLISH;
m_nf = NumberFormat.getInstance(locale);
m_nf.setMaximumFractionDigits(1);
m_df = (DecimalFormat) m_nf;
m_df.applyPattern(".0");
然后我从我的方法 getLowerLimit()
中获取一个值并将其格式化为字符串。这可能是类似于“2.1”(美国格式)或意大利语格式的“2,1”。然后使用 DecimalFormat.parse()
.
将该值存储为 Double
try {
String strValue = m_df.format(getLowerLimit());
Double nValue = (Double) m_df.parse(strValue);
} catch (ParseException | ClassCastException e) {
ErrorDialogGenerator.showErrorDialog(ExceptionConstants.LOWER_LIMIT, e);
System.exit(1);
}
除了数字的小数点为 0 时,此代码对我来说工作正常。例如,当值为“2.1”时有效,但在值为“2.0”时无效。那就是它抛出以下异常的时候:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
为什么当小数点为 0 时它不起作用?我该如何纠正这个问题?谢谢!
由于NumberFormat.parse()
return是一个Number
,它可以return任何具体的Number
实现,例如Integer
或Float
,例如。
将它转换为 Double
你假设它将 return Double
,但在许多情况下它可能被证明是错误的(如你所见)。
如果您希望得到 Double
的结果,您应该这样选择 Number.doubleValue()
:
Double nValue = m_df.parse(strValue).doubleValue();
我正在使用 DecimalFormat
来处理来自不同语言环境的数字格式。我的 DecimalFormat
变量声明如下:
NumberFormat m_nf;
DecimalFormat m_df;
if (strCountry.equals("IT") || strCountry.equals("ES"))
locale = java.util.Locale.ITALIAN;
else
locale = java.util.Locale.ENGLISH;
m_nf = NumberFormat.getInstance(locale);
m_nf.setMaximumFractionDigits(1);
m_df = (DecimalFormat) m_nf;
m_df.applyPattern(".0");
然后我从我的方法 getLowerLimit()
中获取一个值并将其格式化为字符串。这可能是类似于“2.1”(美国格式)或意大利语格式的“2,1”。然后使用 DecimalFormat.parse()
.
Double
try {
String strValue = m_df.format(getLowerLimit());
Double nValue = (Double) m_df.parse(strValue);
} catch (ParseException | ClassCastException e) {
ErrorDialogGenerator.showErrorDialog(ExceptionConstants.LOWER_LIMIT, e);
System.exit(1);
}
除了数字的小数点为 0 时,此代码对我来说工作正常。例如,当值为“2.1”时有效,但在值为“2.0”时无效。那就是它抛出以下异常的时候:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
为什么当小数点为 0 时它不起作用?我该如何纠正这个问题?谢谢!
由于NumberFormat.parse()
return是一个Number
,它可以return任何具体的Number
实现,例如Integer
或Float
,例如。
将它转换为 Double
你假设它将 return Double
,但在许多情况下它可能被证明是错误的(如你所见)。
如果您希望得到 Double
的结果,您应该这样选择 Number.doubleValue()
:
Double nValue = m_df.parse(strValue).doubleValue();