目录
问题:
刚开始时候,是直接用double去进行加减。但是后来发现,原本3570竟然显示成:3569.9999999999995
原因:
double类型之间的运算不能直接使用Double来直接进行运算:因为计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。
在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。
处理方法:
在使用BigDecimal类来进行计算的时候,主要分为以下步骤:
1、用float或者double变量构建BigDecimal对象。例如:
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。
3、把BigDecimal对象转换成float,double,int等类型。