1

我有这两个值: 值 1:“33445.0” 值 2:“33.445,00”

在Java中查看这两者是否相等的最简单方法是什么?

我正在为不同类型的 int、double、float 等而苦苦挣扎。现在值 1 存储为双精度值,值 2 是浮点数。

我怎样才能使这些值相同?

亲切的问候

4

2 回答 2

0

你应该解析这些数字。这两个数字之间的唯一区别是它们在不同的语言环境中格式化

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

如果您不知道每个数字的语言环境,您至少应该知道分隔符(十进制、分组)字符。然后,您可以创建一个自定义的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 回答