本文共 1109 字,大约阅读时间需要 3 分钟。
BigDecimal的equals原理
Compares this BigDecimal with the specified Object for equality. Unlike compareTo, this method considers two BigDecimal objects equal only if they are equal in value and scale (thus 2.0 is not equal to 2.00 when compared by this method)
大概意思就是,equals方法和compareTo并不一样,equals方法会比较两部分内容,分别是值(value)和精度(scale)
BigDecimal(int)BigDecimal(double) BigDecimal(long) BigDecimal(String)
以上四个方法,创建出来的的BigDecimal的精度是不同的。
首先,最简单的就是BigDecimal(long) 和BigDecimal(int),因为是整数,所以精度就是0
而对于BigDecimal(double) ,当我们使用new BigDecimal(0.1)创建一个BigDecimal 的时候,其实创建出来的值并不是整好等于0.1的,而是0.1000000000000000055511151231257827021181583404541015625 。这是因为doule自身表示的只是一个近似值。
其他的浮点数也同样的道理。对于new BigDecimal(1.0)这样的形式来说,因为他本质上也是个整数,所以他创建出来的数字的精度就是0。而对于BigDecimal(double) ,当我们使用new BigDecimal(“0.1”)创建一个BigDecimal 的时候,其实创建出来的值正好就是等于0.1的。那么他的精度也就是1。
如果使用new BigDecimal(“0.10000”),那么创建出来的数就是0.10000,精度也就是5。 所以,因为BigDecimal(“1.0”)和BigDecimal(“1.00”)的精度不一样,所以在使用equals方法比较的时候,得到的结果就是false。BigDecimal中提供了compareTo方法,这个方法就可以只比较两个数字的值,如果两个数相等,则返回0。
转载地址:http://febws.baihongyu.com/