String
にフォーマットされたドイツ語ロケールをBigDecimal
. しかし、私は最善の解決策に苦労しています。
次のコードは私の問題を示しています。
String numberString = "2.105,88";
NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
try {
Number parsed = nf.parse(numberString);
BigDecimal bd1 = new BigDecimal(parsed.toString());
System.out.println(bd1.toString());
BigDecimal bd2 = new BigDecimal(parsed.doubleValue());
System.out.println(bd2);
BigDecimal bd3 = new BigDecimal(numberString);
System.out.println(bd3);
} catch (ParseException e) {
e.printStackTrace();
}
これのアウトプットは
2105.88
2105.8800000000001091393642127513885498046875
スレッド「メイン」での例外 java.lang.NumberFormatException at java.math.BigDecimal.(Unknown Source) at java.math.BigDecimal.(Unknown Source) at test.BigDecimalTest.main(BigDecimalTest.java:22)
String
最初の出力は正しいですが、 aを a にNumber
(Double
正確には) 変換してから、String
再び a に戻し、特定の型のNumber
,に変換するのはあまり意味がありませんBigDecimal
。
2 番目の出力は正しくありませんが、のスケールを設定することで解決できますBigDecimal
。ただし、桁数は常にわかっているわけではありません。
3 番目の出力は明らかに私が探しているものではありません。
私の質問: 最善の方法は何ですか? これを行うためのより良い方法はありますか?