異なるロケールの数値書式を処理するのにDecimalFormat
を使用しています。次のように私のDecimalFormat
変数が宣言されています:10進数が0のときにDecimalFormat.parse()の結果をキャストするときのClassCastException
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);
}
このコードは、数の小数は、それが「2.0」であるとき、それは値が「2.1」であるときに動作しなく例えば0であるときを除いて私のために[OK]を働いています。つまり、次の例外がスローされます。
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
10進数が0のときはどうして機能しませんか?これをどうやって修正するのですか?ありがとう!
おかげで、それが必要だったものをすべてでした! – petehallw