ドイツ語のロケール形式の文字列を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
Test.BigDecimalTest.main(BigDecimalTest.Java:22)のJava.math.BigDecimal。(Unknown Source)のJava.math.BigDecimal。(Unknown Source)のJava.lang.NumberFormatExceptionスレッド「main」の例外
最初の出力は正しいですが、String
をNumber
(正確にはDouble
)に変換してからString
をもう一度、特定のタイプのNumber
、BigDecimal
に。
2番目の出力は正しくありませんが、BigDecimalのスケールを設定することで解決できます。ただし、桁数は常にわかっているとは限りません。
3番目の出力は、明らかに私が探しているものではありません。
私の質問、最良の方法は何でしょうか?これを行うより良い方法はありますか?
Java.Lang.NumberにはBigDecimal型を返すメソッドがないため、他の方法はないようです。とにかく、BigDecimalは "" 2.105,88 "ではなく、" 2105.88 "のように適切にフォーマットされた文字列のみを受け入れるため、理にかなっています。
import Java.math.BigDecimal;
import Java.text.DecimalFormat;
import Java.text.NumberFormat;
import Java.text.ParseException;
import Java.util.Locale;
public class JavaMain {
public static void main(String[] args) {
String numberString = "2.105,88";
//using casting
try {
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.GERMAN);
df.setParseBigDecimal(true);
BigDecimal bd = (BigDecimal) df.parseObject(numberString);
System.out.println(bd.toString());
} catch (ParseException e) {
e.printStackTrace();
}
//your way short version
NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
try {
BigDecimal bd1 = new BigDecimal(nf.parse(numberString).toString());
System.out.println(bd1.toString());
} catch (ParseException e) {
e.printStackTrace();
}
String numberStringFixed = "2105.88";
//direct string formated
System.out.println(new BigDecimal(numberStringFixed));;
//direct but erroneous way if the string is not formated
System.out.println(new BigDecimal(numberString));;
}
}
これがお役に立てば幸いです!
DecimalFormat
には setParseBigDecimal
というメソッドがあり、parse()
がBigDecimal
。返されたNumber
をキャストするだけです。