gpt4 book ai didi

java - 当小数为 0 时转换 DecimalFormat.parse() 的结果时出现 ClassCastException

转载 作者:行者123 更新时间:2023-12-01 18:00:41 24 4
gpt4 key购买 nike

我使用 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() 返回一个 Number,因此它可以返回任何具体的 Number 实现,例如 Integer例如,code> 或 Float。将其转换为 Double 时,您会假设它将返回 Double,但在许多情况下可能会被证明是错误的(正如您所见证的)。

如果您希望获得 Double 形式的结果,则应使用 Number.doubleValue(),如下所示:

Double nValue = m_df.parse(strValue).doubleValue();

关于java - 当小数为 0 时转换 DecimalFormat.parse() 的结果时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41222806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com