1

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

4

1 回答 1

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.10000000000000000055511151231257827021181583404541015625

但是,new BigDecimal(".1")确实确实代表了 0.1,这就是为什么

new BigDecimal(.1).equals(new BigDecimal(".1"))

是假的。

于 2012-08-23T09:18:33.557 回答