Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入

时间:2021-06-04 09:45:04

工具类

package ……;

import java.math.BigDecimal;

/**
* Created by kongqw on 2015/12/10.
*/

public final class BigDecimalUtil {
private BigDecimalUtil() {
}

/**
* 加法运算
*
* @param d1 d1
* @param d2 d2
* @return
*/

public static double add(double d1, double d2) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.add(b2).doubleValue();
}

/**
* 减法运算
*
* @param d1 d1
* @param d2 d2
* @return
*/

public static double sub(double d1, double d2) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.subtract(b2).doubleValue();
}

/**
* 乘法运算
*
* @param d1 d1
* @param d2 d2
* @return
*/

public static double mul(double d1, double d2) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.multiply(b2).doubleValue();
}

/**
* 除法运算
*
* @param d1 被除数
* @param d2 除数
* @param len 保留几位有效小数
* @return
*/

public static double div(double d1, double d2, int len) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
// BigDecimal.ROUND_HALF_UP 舍入模式
return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
}

/**
* 四舍五入操作
*
* @param d 要操作的数
* @param len 保留几位有效数字
* @return
*/

public static double round(double d, int len) {
BigDecimal b1 = new BigDecimal(d);
BigDecimal b2 = new BigDecimal(1);
// 任何一个数字除以1都是原数字
// ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入的操作
return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}