3、Number工具类


import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * Number工具类
 *
 */
public abstract class NumberUtil {
	//------------常量定义-------------//
	/** 零 */
	public static BigDecimal ZERO = BigDecimal.ZERO;
	/** 一百 */
	public static BigDecimal ONE_HUNDRED = new BigDecimal("100");
	
	
	private static NumberFormat nf = new DecimalFormat("0000");
    public static MathContext mc = new MathContext(16);


    /**
     * double 相加
     * 
     * @param dd
     * @return
     */
    public static double doubleAdd(double... dd) {
        BigDecimal result = BigDecimal.ZERO;
        for (double n : dd) {
            result = result.add(new BigDecimal("" + n));
        }
        return result.doubleValue();
    }

    /**
     * double 相加 - 四舍五入
     * 
     * @param dd
     * @return
     */
    public static double doubleAddScaled(double... dd) {
        BigDecimal result = BigDecimal.ZERO;
        for (double n : dd) {
            result = result.add(new BigDecimal("" + n));
        }

        return scale(result);
    }

    /**
     * double 相减
     * 
     * @param d1
     * @param d2
     * @return
     */
    public static double doubleSubtract(double d1, double d2) {
        return new BigDecimal("" + d1).subtract(new BigDecimal("" + d2)).doubleValue();
    }

    /**
     * double 相减 - 四舍五入
     * 
     * @param d1
     * @param d2
     * @return
     */
    public static double doubleSubtractScaled(double d1, double d2) {
        return scale(new BigDecimal("" + d1).subtract(new BigDecimal("" + d2)));
    }

    /**
     * 四舍五入 - RoundingMode.HALF_UP
     * 
     * @param decimal
     * @return
     */
    private static double scale(BigDecimal decimal) {
        return decimal.setScale(2, RoundingMode.HALF_UP).doubleValue();
    }

    /**
     * 货币形式格式字符串
     * 
     * @param ####,###0.00
     * @param value
     */
    public static String formatNumberString(String format, String value) {
        BigDecimal bd = new BigDecimal(value);
        DecimalFormat df = new DecimalFormat(format);
        return df.format(bd);
    }

    /**
     * 相除 取位 d1/d2 - 四舍五入
     * 
     * @param d1
     * @param d2
     * @param scale
     * @return
     */
    public static double doubleDivide(double d1, double d2, int scale) {
        BigDecimal bd1 = new BigDecimal(d1);
        BigDecimal bd2 = new BigDecimal(d2);
        BigDecimal bd3 = bd1.divide(bd2, mc);
        return bd3.setScale(scale, RoundingMode.HALF_UP).doubleValue();
    }

    /**
     * 相乘 取位 d1*d2 - 四舍五入 默认保留2位
     * 
     * @param d1
     * @param d2
     * @return
     */
    public static double doubleMultiply(double d1, double d2) {
        return doubleMultiply(d1, d2, 2);
    }

    /**
     * 相乘 取位 d1*d2 - 四舍五入
     * 
     * @param d1
     * @param d2
     * @param scale
     * @return
     */
    public static double doubleMultiply(double d1, double d2, int scale) {
        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.multiply(bd2, mc).setScale(scale, RoundingMode.HALF_UP).doubleValue();
    }

    /**
     * 相乘 取位 d1*d2 - 四舍五入
     * 
     * @param scale
     * @param dd
     * @return
     */
    public static double doubleMultiplyScale(int scale, double... dd) {
        BigDecimal result = BigDecimal.ONE;
        for (double n : dd) {
            result = result.multiply(new BigDecimal("" + n), mc);
        }
        return result.setScale(scale, RoundingMode.HALF_UP).doubleValue();
    }

    /**
     * 将整数转化为四位数字
     * 
     * @param number
     * @return
     */
    public static String formatFourNumber(Integer number) {
        return nf.format(number);
    }

    /**
     * 获取带千分符并保留两位小数的金额
     * 
     * @param amount
     * @return
     */
    public static String formatNumber(double amount) {
        String result = NumberFormat.getCurrencyInstance().format(amount).substring(1);
        return result;
    }
	
}

猜你喜欢

转载自my.oschina.net/u/3551274/blog/1796786
今日推荐