我有这两个值: 值 1:“33445.0” 值 2:“33.445,00”
在Java中查看这两者是否相等的最简单方法是什么?
我正在为不同类型的 int、double、float 等而苦苦挣扎。现在值 1 存储为双精度值,值 2 是浮点数。
我怎样才能使这些值相同?
亲切的问候
我有这两个值: 值 1:“33445.0” 值 2:“33.445,00”
在Java中查看这两者是否相等的最简单方法是什么?
我正在为不同类型的 int、double、float 等而苦苦挣扎。现在值 1 存储为双精度值,值 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
现在,你怎么知道哪个号码去哪个区域设置?这将是棘手的部分。我希望您不要在没有任何有关其来源的“额外”信息的情况下获得这些数字。
如果您不知道每个数字的语言环境,您至少应该知道分隔符(十进制、分组)字符。然后,您可以创建一个自定义的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);