由于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自身表明的只是一个近似值。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...