现在的位置: 首页 > 综合 > 正文

DoubleUtil.java double数据操作

2013年10月12日 ⁄ 综合 ⁄ 共 3297字 ⁄ 字号 评论关闭
import java.math.BigDecimal;
import java.text.DecimalFormat;

import org.apache.commons.lang.StringUtils;

public class DoubleUtil {
	private static final int DEF_DIV_SCALE = 10;

	public static double scale2(double v) {
		BigDecimal bd = new BigDecimal(v);
		bd = bd.setScale(2, 4);
		return bd.doubleValue();
	}

	public static int getIntNum(Double value) {
		DecimalFormat df = new DecimalFormat("#");
		String str = df.format(value).replaceAll("-", "");
		return str.length();
	}

	public static void main(String[] args) {
		Double double1 = Double.valueOf(-3.126D);
		System.out.println(scale2(double1.doubleValue()));
		System.out.println(changeDecimal(double1.doubleValue(), 2));
		System.out.println("0.1*0.1=" + mul(Double.valueOf(0.1D), Double.valueOf(0.1D)));
		System.out.println("1.0-0.1=" + sub(Double.valueOf(1.0D), Double.valueOf(0.1D)));
		System.out.println("0.1+0.1=" + add(Double.valueOf(0.1D), Double.valueOf(0.1D)));
		System.out.println(getIntNum(double1));
		System.out.println(toDecimalString("4444564321.2135", 2));
	}

	public static double changeDecimal(double value, int num) {
		BigDecimal b = new BigDecimal(value);
		double v = b.setScale(num, 4).doubleValue();
		return v;
	}

	public static String toDecimalString(String str, int decimal) {
		if (StringUtils.isEmpty(str)) {
			return "";
		}
		return toDecimalString(Double.valueOf(str.trim()), decimal);
	}

	public static String toDecimalString(Double num, int decimal) {
		if (num == null) {
			return "";
		}
		String str = num.toString();
		String formatStr = "#.";
		for (int i = 0; i < decimal; ++i) {
			formatStr = formatStr + "0";
		}
		DecimalFormat df = new DecimalFormat(formatStr);
		try {
			str = df.format(num);
		} catch (Exception localException) {
		}
		return str;
	}

	public static String toSplitDecimalString(Double num, int decimal) {
		if (num == null) {
			return "";
		}
		String str = num.toString();
		String formatStr = "###,###.";
		for (int i = 0; i < decimal; ++i) {
			formatStr = formatStr + "0";
		}
		DecimalFormat df = new DecimalFormat(formatStr);
		try {
			str = df.format(num);
		} catch (Exception localException) {
		}
		return str;
	}

	public static String toSplitDecimalString(String str, int decimal) {
		if (StringUtils.isEmpty(str)) {
			return "";
		}
		return toSplitDecimalString(Double.valueOf(str.trim()), decimal);
	}

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

	public static Double add(Double v1, Double v2, int num) {
		return Double.valueOf(changeDecimal(add(v1, v2).doubleValue(), num));
	}

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

	public static Double sub(Double v1, Double v2, int num) {
		return Double.valueOf(changeDecimal(sub(v1, v2).doubleValue(), num));
	}

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

	public static Double mul(Double v1, Double v2, int num) {
		return Double.valueOf(changeDecimal(mul(v1, v2).doubleValue(), num));
	}

	public static Double div(Double v1, Double v2) {
		BigDecimal b1 = new BigDecimal(v1.toString());
		BigDecimal b2 = new BigDecimal(v2.toString());
		return Double.valueOf(b1.divide(b2, 10, 4).doubleValue());
	}

	public static Double div(Double v1, Double v2, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException("The scale must be a positive integer or zero");
		}
		BigDecimal b1 = new BigDecimal(v1.toString());
		BigDecimal b2 = new BigDecimal(v2.toString());
		return Double.valueOf(b1.divide(b2, scale, 4).doubleValue());
	}
}

 

抱歉!评论已关闭.