1

次の 2 つの値があります: 値 1: "33445.0" 値 2: "33.445,00"

これら2つがJavaで等しいかどうかを確認する最も簡単な方法は何ですか?

int、double、float などのさまざまなタイプに苦労しています。現在、値 1 は double として格納され、値 2 は float です。

これらの値を同じにするにはどうすればよいですか?

敬具

4

2 に答える 2

0

数値を解析する必要があります。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

さて、どの番号がどのロケールに行くのかをどうやって知るのですか?それは難しい部分になるでしょう。私はあなたがそれらの起源についての「余分な」情報なしで数字を取得しないことを望んでいます。

于 2013-03-13T13:21:28.980 に答える
0

各数値のロケールがわからない場合は、少なくとも区切り文字(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);
于 2013-03-14T10:37:47.720 に答える