用Java中的点和冒号处理不同的数字

时间:2013-03-13 13:15:30

标签: java numberformatexception

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

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

我正在努力使用不同类型的int,double,float等。现在值1存储为double,值2存储为float。

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

亲切的问候

2 个答案:

答案 0 :(得分: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

现在,您如何知道哪个号码属于哪个Locale?这将是棘手的部分。我希望你没有任何关于它们起源的“额外”信息而得到数字。

答案 1 :(得分: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);