程序中用对double浮点数进行加减乘除运算时,则需要先将double类型数值包装成BigDecimal对象,下面是一个封装double精确计算的类。
package com.kevin.char9; import java.math.BigDecimal; public class BigDecimalUtil { //默认除法运算精度,保留小数点后10位 private static final int DEF_DIV_SCALE=10; //构造器私有,让这个类不能实例化 private BigDecimalUtil(){} /** * * @Description: 提供精确的加法运算 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 * @Auther: lujinyong * @Date: 2014-1-7 下午01:07:16 */ public static double add(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.add(b2).doubleValue(); } /** * * @Description: 提供精确的减法运算 * @param v1 被减数 * @param v2 减数 * @Auther: lujinyong * @Date: 2014-1-7 下午01:05:43 */ public static double sub(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.subtract(b2).doubleValue(); } /** * * @Description: 提供精确的乘法运算 * @param v1被乘数 * @param v2乘数 * @return 两个参数的积 * @Auther: lujinyong * @Date: 2014-1-7 下午01:07:54 */ public static double multiply(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.multiply(b2).doubleValue(); } /** * * @Description:提供(相对)精确的除法运算,当发生除不尽的情况,精确到小数点后10位数字四舍五入 * @param v1被除数 * @param v2除数 * @return 两个参数的商 * @Auther: lujinyong * @Date: 2014-1-7 下午01:09:38 */ public static double div(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue(); } }