【Java】【12】精确的加减乘除运算

前言:用了BigDecimal对象

正文:

1,加法

/**
 * @param v1 被加数
 * @param v2 加数
 * @param scale 保留几位小数*/
public static double add(Double v1, Double v2, int scale){
    BigDecimal b1 = new BigDecimal(Double.toString(v1 == null? 0.0 : v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2 == null? 0.0 : v2));
    return round(b1.add(b2).doubleValue(), scale);
}
//3个数相加
public static double add(Double v1, Double v2, Double v3, int scale)  {  
    BigDecimal b1 = new BigDecimal(Double.toString(v1 == null? 0.0 : v1));  
    BigDecimal b2 = new BigDecimal(Double.toString(v2 == null? 0.0 : v2));
    BigDecimal b3 = new BigDecimal(Double.toString(v3 == null? 0.0 : v3));
    BigDecimal b = b1.add(b2);
    return round(b.add(b3).doubleValue(), scale);  
}

2,减法

/** 
 * @param v1 被减数 
 * @param v2 减数  
 */  
public static double sub(double v1, double v2, int scale)  {  
    BigDecimal b1 = new BigDecimal(Double.toString(v1));  
    BigDecimal b2 = new BigDecimal(Double.toString(v2));  
    return round(b1.subtract(b2).doubleValue(), scale);  
} 

3,乘法

/** 
 * @param v1 被乘数 
 * @param v2 乘数 
 */  
public static double mul(double v1, double v2, int scale)  {  
    BigDecimal b1 = new BigDecimal(Double.toString(v1));  
    BigDecimal b2 = new BigDecimal(Double.toString(v2));  
    return round(b1.multiply(b2).doubleValue(), scale);  
} 

4,除法

/** 
 * @param v1 被除数 
 * @param v2 除数 
 */ 
public static double div(double v1, double v2, int scale)  {   
    BigDecimal b1 = new BigDecimal(Double.toString(v1));  
    BigDecimal b2 = new BigDecimal(Double.toString(v2));  
    return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); //ROUND_HALF_UP:四舍五入 
}

5,小数位处理

/** 
 * @param v 需要四舍五入的数字 
 * @param scale 小数点后保留几位  
 */  
public static double round(double v, int scale)  {  
    if (scale < 0) {  
        throw new IllegalArgumentException("The scale must be a positive integer or zero");  
    }  
    BigDecimal b = new BigDecimal(Double.toString(v));  
    BigDecimal one = new BigDecimal("1");  
    return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();  
}

猜你喜欢

转载自www.cnblogs.com/huashengweilong/p/10731608.html