BigDecimal equals方法等值比较有哪些坑

由于BigDecimal的equals方法和compareTo并不一样,equals方法会比较两部分内容,分别是值(value)和标度(scale),而对于0.1和0.10这两个数字,他们的值虽然一样,但是精度是不一样的,所以在使用equals比较的时候会返回false。所以,要比较 BigDecimal 值是否相等用 compareTo 方法

为什么会标度不同?

BigDecimal 有四种构造函数:

BigDecimal(int);

BigDecimal(double);

BigDecimal(long);

BigDecimal(String);

new BigDecimal(1) 的标度为 0

new BigDecimal(1.0) 的标度为 0

new BigDecimal(“1.0”) 的标度为 1

new BigDecimal(0.1) 的标度为 53。由于当我们使用new BigDecimal(0.1)创建一个BigDecimal 的时候,实则创建出来的值并不是整好等于0.1的,而是0.10000000000000000555……………83404541015625 。这是由于double自身表明的只是一个近似值。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...