商业计算--BigDecimal

float和double类型主要是为了科学计算而设计的,它们并没有提供完全精确的结果,所以不应该被用于需要精确结果的场合。
对于此,在大多数的商业计算中,一般采用BigDecimal来进行精确计算。
BigDecimal的使用步骤如下:
1.初始化一个BigDecimal对象,两种方法都可行

BigDecimal bd1 = new BigDecimal(Double.toString(0.123));
BigDecimal bd2 = BigDecimal.valueOf(0.123);

2.具体运算方法如下:

public BigDecimal add(BigDecimal value);                        //加法
public BigDecimal subtract(BigDecimal value);                   //减法 
public BigDecimal multiply(BigDecimal value);                   //乘法
public BigDecimal divide(BigDecimal value);                     //除法

对于除法,要考虑除不尽的情况,因此需要指定保留小数位和取值策略的问题。
计算结束后,如果我们需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法。
现在我们就来封装一个BigDecimal运算工具类,下次直接调用即可

public class BigDecimalUtil {

    private BigDecimalUtil(){

    }


    public static BigDecimal add(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2);
    }

    public static BigDecimal sub(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2);
    }


    public static BigDecimal mul(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2);
    }

    public static BigDecimal div(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);//四舍五入,保留2位小数

        //除不尽的情况
    }





}

你可能感兴趣的:(商业计算--BigDecimal)