package com.persagy.framework.util;

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

import org.apache.commons.collections.CollectionUtils;

/**
 * Description: 数字工具类   
 * Company: Persagy 
 * @author cuixubin 
 * @version 1.0
 * @since: 2018年9月18日: 上午10:39:16
 * Update By cuixubin 2018年9月18日: 上午10:39:16
 */
public class NumberUtils {
	
	/**
	 * Description: 对浮点数四舍五入
	 * @param number 浮点数
	 * @param scale 小数保留位， 0-四舍五入到个位，1-四舍五入到到0.1，2-四舍五入到到0.01，-1四舍五入到到十位
	 * @return double
	 * @author cuixubin
	 * @since 2019年1月5日: 下午2:09:09
	 */
	public static double roundUp(double number, int scale) {
		BigDecimal bg = new BigDecimal(number).setScale(scale, RoundingMode.HALF_UP);
		return bg.doubleValue();
	}
	
	/**
	 * Description: 对浮点数四舍五入
	 * @param number 浮点数
	 * @param scale 小数保留位， 0-四舍五入到个位，1-四舍五入到到0.1，2-四舍五入到到0.01，-1四舍五入到到十位
	 * @return Double 若参数number值为null，则返回null
	 * @author cuixubin
	 * @since 2019年1月7日: 上午9:26:31
	 */
	public static Double roundUp(Double number, int scale) {
		if(null == number) {
			return null;
		}
		
		BigDecimal bg = new BigDecimal(number).setScale(scale, RoundingMode.HALF_UP);
		return bg.doubleValue();
	}
	
	public static void main(String[] args) {
		System.out.println(roundUp(12.123, 0));
	}
	
	/**
	 * Description: 字符串类型数字转Double，转换异常返回null 
	 * @param str
	 * @return Double
	 * @author cuixubin
	 * @since 2018年9月18日: 上午10:41:59
	 * Update By cuixubin 2018年9月18日: 上午10:41:59
	 */
	public static Double str2double(String str) {
		Double num = null;
		
		if(null == str || str.trim().equals("")) {
			return num;
		}
		
		try {
			num = Double.valueOf(str);
		}catch (Exception e) {
		}
			
		return num;
	}
	
	/**
	 * 
	 * Description: 对象转Double类型
	 * @param object
	 * @return Double
	 * @author JiShaoJun
	 * @since 2018年12月15日: 下午8:14:10
	 */
	public static Double Object2Double(Object object) {
		if (object == null) {
			return null;
		}
		if (object instanceof String) {
			return Double.valueOf(object.toString());
		}
		if (object instanceof Integer) {
			return ((Integer) object).doubleValue();
		}
		if (object instanceof Long) {
			return ((Long) object).doubleValue();
		}
		if (object instanceof Double) {
			return (Double) object;
		}
		return (Double) object;
	}

	/**
	 * description 求和 
	 * @param dataList
	 * @return java.lang.Double
	 * @author feng
	 * @since 16:08 2018/12/20
	 */
    public static Double getDoubleSum(Collection<Double> dataList) {
        if (CollectionUtils.isEmpty(dataList)) {
            return null;
        }
        Double sum = null;
        for (Double data : dataList) {
            if (data != null) {
                sum = sum == null ? data : sum + data;
            }
        }
        return sum;
    }

	public static Integer getIntegerSum(List<Integer> dataList) {
		if (CollectionUtils.isEmpty(dataList)) {
			return null;
		}
		Integer sum = null;
		for (Integer data : dataList) {
			if (data != null) {
				sum = sum == null ? data : sum + data;
			}
		}
		return sum;
	}
    
}
