BigDecimal适用于金融等高精度场景,推荐用String构造、用add/subtract/multiply/divide运算、用compareTo比较、用setScale控制精度和舍入。
BigDecimal 主要用于高精度的数值计算,特别是在金融、货币等对精度要求高的场景中。它能避免 float 和 double 运算中的精度丢失问题。
使用 String 构造函数是最推荐的方式,避免精度问题:
- new BigDecimal("0.1") → 正确保留精度BigDecimal 是不可变对象,每次运算返回新实例:
- 加法:a.add(b)不能用 == 或 compareTo() 外的方法比较:
- 使用 compareTo():a.compareTo(b) 返回 1、0、-1控制小数位数和舍入方式,常用于金额计算:
- setScale(2, RoundingMode.HA
LF_UP) → 保留两位小数,四舍五入基本上就这些。用好构造方式、注意除法要指定精度、比较用 compareTo,就能避免大多数坑。