float和double类型主要为了科学计算和工程计算而设计。
它们执行二进制浮点运算,提供较为精确的快速近似计算。
float和double尤其不适用于货币计算。
解决办法:使用BigDecimal、int或long进行货币计算
使用int或者long时,以分位单位进行计算,而不是以元为单位。
BigDecimal:
构造器
BigDecimal(int)
BigDecimal(double)
BigDecimal(long)
BigDecimal(String)
常用方法:
public BigDecimal add(BigDecimal augend) 加法
public BigDecimal subtract(BigDecimal subtrahend) 减法
public BigDecimal multiply(BigDecimal multiplicand) 乘法
public BigDecimal divide(BigDecimal divisor) 除法
public BigDecimal setScale(int arg0,RoundingMode arg1) 设置小数
RoundingMode:
ROUND_UP 截断位之后非0进位,如4.01保留一位小数得到4.1
ROUND_DOWN 直接截断,如4.07保留一位小数得到4.0
ROUND_FLOOR 负数作ROUND_UP,正数作ROUND_DOWN
ROUND_GEILING 负数作ROUND_DOWN,正数作ROUND_UP
ROUND_HALF_UP 标准四舍五入,如4.55保留一位小数得到4.6
ROUND_HALF_DOWN 五舍大于五入,如4.55保留一位小数得4.5,4.55001保留一位小数得4.6