BigDecimal#compareTo 具有不同的比例

dmw*_*268 1 java bigdecimal

为什么以下返回1

new BigDecimal(0.82).setScale(5, BigDecimal.ROUND_HALF_DOWN)
    .compareTo(new BigDecimal(0.82))
Run Code Online (Sandbox Code Playgroud)

我希望这会返回,0因为根据其文档BigDecimal.compareTo 忽略了比例

将此BigDecimal与指定的BigDecimal. 值相等但具有不同比例(如和)的两个BigDecimal对象被此方法视为相等。[...]2.02.00

Lou*_*man 7

new BigDecimal(0.82)实际上不是0.82,因为你传递一个double值-double 最接近至0.82,这是不完全0.82 -给构造函数,所以new BigDecimal(0.82)BigDecimal等于double最接近0.82。

相反,使用new BigDecimal("0.82").

  • @Zabuza `setScale` 做到了。而 0.82000.compareTo(0.81999999999999995115018691649311222136020660400390625) 应该是>0 (3认同)