java double类型运算避免精度丢失

/**
	 * 保留两位小数
	 * 
	 * @param values
	 * @return
	 */
	public static double format2(double values) {
		return new BigDecimal(Double.toString(values)).setScale(2, RoundingMode.HALF_UP).doubleValue();
	}


	/**
	 * 
	 * @param values
	 *            乘数
	 * @param values2
	 *            被乘数
	 * @param digit
	 *            保留位数
	 * @return
	 */
	public static double multiplication(double values, double values2, int digit) {
		BigDecimal b1 = new BigDecimal(Double.toString(values));
		BigDecimal b2 = new BigDecimal(Double.toString(values2));
		return b1.multiply(b2).setScale(digit, RoundingMode.HALF_UP).doubleValue();
	}


	/**
	 * 相加
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double sum(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.add(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
	}


	/**
	 * 相减
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double sub(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.subtract(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
	}


	/**
	 * 相除
	 * 
	 * @param d1
	 *            除数
	 * @param d2
	 *            被除数
	 * @return
	 */
	public static double divide(double d1, double d2) {
		if (d1 == 0d || d2 == 0d) {
			return 0d;
		}
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return new Double(b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP).doubleValue());
	}
	


你可能感兴趣的:(java double类型运算避免精度丢失)