写在前面——接近年底,项目遇到很多报表、结算等类型的需求,自然就会遇到很多double类型的逻辑运算,正巧之前没有总结过这方面的东西,所以就有了这篇帖子。
最开始做的时候比较渣,没有注意两个double类型做逻辑运算最后得到的数字是有误差的(原谅我这个时候有些粗心了),如下所示:
public static void main(String[] args) {
double a=1.47;
double b=2.34;
System.out.println(a+b);//结果为:3.8099999999999996
}
因为在实际项目中还有3位小数、4位小数等,都会出现误差,所以在很多语言中double类型的数值都不能直接进行运算,会出现这种精度问题,试想一下某个客户只有3.8099999999999996元,但是系统认为他有3.81元,可以购买3.81元的商品,久而久之那商家就亏大了,细思极恐啊有木有!
所以要进行double类型的逻辑运算的时候要怎么做才能保证不会出现精度的问题呢?我突然想到在之前看的一本非常经典的书叫做《Effective Java》,Java 之父 James Gosling非常推崇的一本书。里面就提到了float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。BigDecimal一共有4个构造方法,其中两个对我们有用的分别是:
1、BigDecimal(double val)
Translates a double into a BigDecimal.
2、BigDecimal(String val)
Translates