package cn.com.qmth.stmms.biz.utils;

import java.math.BigDecimal;
import java.util.List;

import org.springframework.util.CollectionUtils;

/**
 * 计算器
 *
 */
public class Calculator {
	
    public static double add(Double v1, Double v2) {
    	if(v1==null) {
    		v1=0.0;
    	}
    	if(v2==null) {
    		v2=0.0;
    	}
        return add(v1, v2, 2);

    }

    /**
     * 加法 保留两位小数
     * 
     * @param v1
     * @param v2
     * @return
     */
    public static double add(double v1, double v2) {
        return add(v1, v2, 2);

    }

    /**
     * 加法 保留指定位小数
     * 
     * @param v1
     * @param v2
     * @param len
     * @return
     */
    public static double add(double v1, double v2, int len) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.add(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();

    }
    
    /** 加法 保留指定位小数
     * @param ds
     * @param len
     * @return
     */
    public static double add(List<Double> ds, int len) {
        if(CollectionUtils.isEmpty(ds)) {
        	return 0;
        }
        BigDecimal ret = new BigDecimal(0.0);
        for(Double d:ds) {
            if(d!=null) {
                ret=ret.add(new BigDecimal(d));
            }
        }
        return ret.setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();

    }

    /**
     * 减法 保留两位小数
     * 
     * @param v1
     * @param v2
     * @return
     */
    public static double subtract(double v1, double v2) {
        return subtract(v1, v2, 2);

    }

    /**
     * 减法 保留指定位小数
     * 
     * @param v1
     * @param v2
     * @param len
     * @return
     */
    public static double subtract(double v1, double v2, int len) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();

    }

    /**
     * 乘法 保留两位小数
     * 
     * @param v1
     * @param v2
     * @return
     */
    public static double multiply(double v1, double v2) {
        return multiply(v1, v2, 2);

    }

    /**
     * 乘法 保留指定位小数
     * 
     * @param v1
     * @param v2
     * @param len
     * @return
     */
    public static double multiply(double v1, double v2, int len) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.multiply(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();

    }
    
    
    /**
     * 除法 保留两位小数
     * 
     * @param v1
     * @param v2
     * @param len
     * @return
     */
    public static double divide(double v1, double v2) {
        return divide(v1, v2, 2);
    }
    
    /**
     * 除法 保留指定位小数
     * 
     * @param v1
     * @param v2
     * @param len
     * @return
     */
    public static double divide(double v1, double v2, int len) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    public static String divide2String(Double v1, Double v2, int len) {
        if(v1==null||v2==null||v2==0) {
            return "-";
        }
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return String.valueOf(b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue());
    }
}
