BigDecimal的值比较 - Java基础

53 阅读1分钟

BigDecimal的值比较实用compareTo,而不使用equals

使用equals比较2个BigDecimal对象值时,会比较值(value)和标度(scale),比如0.1和0.10的值一样,但标度不一样,而compareTo仅比较值

BigDecimal的equals原理

BigDecimal a = new BigDecimal(1)
BigDecimal b = new BigDecimal(1L)
a.equals(b) // true

结论:11L均为整数,标度为0
BigDecimal a = new BigDecimal(0.1)
BigDecimal b = new BigDecimal(0.10)
a.equals(b) // true

结论:0.10.10均为浮点数,存储的近似值为0.100...625,其标度均为55
BigDecimal a = new BigDecimal("0.1")
BigDecimal b = new BigDecimal("0.10")
a.equals(b) // false

结论:"0.1""0.10"均为字符串,存储的值分别为0.10.10,标度分别为12

所以BigDecimal的值比较使用compareTo

image.png

参考资料

Hollis 大神的《2023全新Java面试宝典课程,八股文学习资料》