簡體   English   中英

當十進制為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()返回Number ,因此它可以返回任何具體的Number實現,例如IntegerFloat 將其強制轉換為Double您會假設它將返回Double ,但是在許多情況下(如您所見),它可能被證明是錯誤的。

如果希望將結果作為Double ,則應使用Number.doubleValue()這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM