BigDeciaml
- 1. BigDecimal
1. BigDecimal
我们知道,关于金钱相关的计算,都用BigDeciaml数据类型, 来表示金额。所有关于金额的项目中不能缺少它的使用。
而我今天说说用这个类型,踩到的坑。
- 金额比较问题
- 带精度不适用equals比较。使用compareTo比较精度。如0和0.00比较。
public class BigDecimalDemo {public static void main(String[] args) {BigDecimal a = new BigDecimal("0.00");BigDecimal b = new BigDecimal("0");System.out.println(a.compareTo(b) == 0); // trueSystem.out.println(a.equals(b)); // false}
}
- 除法问题。
- 根据业务不同,要四舍五入。要保留两位小数,把两位小数后面的零头给去掉。
- 不能整除的会抛异常,需要指明除法策略。
// 去掉零头,参考RoundingMode
BigDecimal res = new BigDecimal("888").divide(new BigDecimal("233"), 2, RoundingMode.DOWN);
System.out.println(res); // 3.81
如RoundingMode.HALF_UP,四舍五入。
- 如果是页面需要百分数,可以考虑保留小数点后四位。结合实际业务,进行取舍。