我有这两个值: 值1:“33445.0” 价值2:“33.445,00”
在Java中查看这两者是否相等的最简单方法是什么?
我正在努力使用不同类型的int,double,float等。现在值1存储为double,值2存储为float。
我怎样才能使这些值相同?
亲切的问候
答案 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);