BigDecimal的使用

BigDecimal的使用

由于做项目时计算金额需要处理精度比较高的浮点数,我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。 

比如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999 

可以改用BigDecimal类来进行数值处理避免精度问题带来的误差。 

创建BigDecimal的方式说明

创建BigDecimal对象时不要使用数值型作为构造参数,如果是数值型还是会出现精度的问题,比如: 

BigDecimal a = new BigDecimal(1.2);

BigDecimal b = new BigDecimal(2.2); 

输出的结果是:

1.1999999999999999555910790149937383830547332763671875

2.20000000000000017763568394002504646778106689453125 

如果创建BigDecimal对象使用字符串作为构造参数就不会有精度的问题比如:

BigDecimal a = newBigDecimal("1.2");

BigDecimal b = newBigDecimal("2.2");

输出的结果是:

1.2

2.2

四则运算的写法如下

a.add(b); 

a.subtract(b); 

a.multiply(b); 

a.divide(b,2, RoundingMode.HALF_UP);

参数解释 a除以b,保留两位小数,保存两位小数的方式是标准的四舍五入


发表评论