BigDecimal - 将不变量与DecimalFormat进行比较

时间:2012-08-23 09:06:08

标签: java bigdecimal

我使用###,###。##格式生成一个BIgDecimal,结果为660,000.00,然后我尝试将其与new BigDecimal(660000.00)进行拼接,但每次都返回false。有没有办法比较不变的值与它们在?

中创建的初始格式

1 个答案:

答案 0 :(得分:2)

这是因为两个BigDecimals比例不同:

System.out.println(new BigDecimal("660000.00").scale()); // 2
System.out.println(new BigDecimal(660000.00).scale());   // 0

无论比例如何,要比较它们,你可以这样做:

BigDecimal bd1 = new BigDecimal("660000.00");
BigDecimal bd2 = new BigDecimal(660000.00);

int s = Math.max(bd1.scale(), bd2.scale());
.. bd1.setScale(s).equals(bd2.setScale(s)) ..   // == true.

附注:请注意双字面值(例如.1)不代表实际值.1,而是它的近似值。 (这是由于浮点表示中的不准确性。)这可以通过执行

来看出
System.out.println(new BigDecimal(.1));

打印0.1000000000000000055511151231257827021181583404541015625

然而,new BigDecimal(".1")确实完全代表.1,这就是

的原因
new BigDecimal(.1).equals(new BigDecimal(".1"))

是假的。