次の 2 つの値があります: 値 1: "33445.0" 値 2: "33.445,00"
これら2つがJavaで等しいかどうかを確認する最も簡単な方法は何ですか?
int、double、float などのさまざまなタイプに苦労しています。現在、値 1 は double として格納され、値 2 は float です。
これらの値を同じにするにはどうすればよいですか?
敬具
次の 2 つの値があります: 値 1: "33445.0" 値 2: "33.445,00"
これら2つがJavaで等しいかどうかを確認する最も簡単な方法は何ですか?
int、double、float などのさまざまなタイプに苦労しています。現在、値 1 は double として格納され、値 2 は float です。
これらの値を同じにするにはどうすればよいですか?
敬具
数値を解析する必要があります。2つの数値の唯一の違いは、異なるロケールでフォーマットされていることです。
NumberFormat format_english = NumberFormat.getInstance(Locale.ENGLISH);
NumberFormat format_france = NumberFormat.getInstance(Locale.GERMAN);
Number number1 = format.parse("33445.0");
Number number2 = format.parse("33.445,00");
double d1 = number1.doubleValue(); // or whatever value you're looking for
double d2 = number2.doubleValue();
// now compare them as any two "normal" numbers
さて、どの番号がどのロケールに行くのかをどうやって知るのですか?それは難しい部分になるでしょう。私はあなたがそれらの起源についての「余分な」情報なしで数字を取得しないことを望んでいます。
各数値のロケールがわからない場合は、少なくとも区切り文字(10進数、グループ化)を知っている必要があります。次に、それぞれを解析するためのカスタムDecimalFormatを作成できます。
DecimalFormatSymbols symbols1 = new DecimalFormatSymbols();
symbols1.setGroupingSeparator(',');
symbols1.setDecimalSeparator('.');
DecimalFormat df1 = new DecimalFormat("0.0", symbols1);
df1.setParseBigDecimal(true);
BigDecimal number1 = (BigDecimal) df1.parse("33445.0");
DecimalFormatSymbols symbols2 = new DecimalFormatSymbols();
symbols2.setGroupingSeparator('.');
symbols2.setDecimalSeparator(',');
DecimalFormat df2 = new DecimalFormat("0,0", symbols2);
df2.setParseBigDecimal(true);
BigDecimal number2 = (BigDecimal) df2.parse("33.445,00");
int result = number1.compareTo(number2);