数据类型
1.BigDecimal
金额计算必须用BigDecimal。
Double相减会转换成二进制,因为Double有效位数为 16位这就会出现存储小数位数不够的情况,这种情况下就会出现误差,解决方法就是使用BigDecimal,它的有效长度足够长可存储小数位数。
因此可代替Double来进行加减乘除,金额必须是完全精确的计算, 故不能使用Double或者Float, 而应该采用java.math.BigDecimal。
BigDecimal加法用a.add(b)
BigDecimal减法用a.subtract(b)
BigDecimal乘法用a.multiply(b)
BigDecimal除法用a.divide(b)
BigDecimal比较大小用a.compareTo(b)
BigDecimal.equals方法的话不仅会比较值的大小,还会比较两个对象的精确度,
compareTo方法则不会比较精确度,只比较数值的大小
所以判断BigDecimal是否为0,要使用compareTo(BigDecimal.ZERO),返回1则说明前者大于后者 返回0说明相等 返回-1说明前者小于后者
BigDecimal.negate()方法取一个BigDecimal的相反数,负数返回正数,正数返回负数
BigDecimal.stripTrailingZeros()去掉BigDecimal末尾多余的0,比如2.0000变成2。此时把这个BigDecimal.toString(),会显示科学计数法的数值,需要搭配toPlainString()使用,就会返回普通的数字字符串