下面是处理浮点数运算的工具类,现在不是很全,后期会随着应用而完善
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* @author :hwweic
* @date :Created in 2019/11/24 15:34
* @description :
*
* @version: 1.0
*/
public class ArithMoney {
/**
* 精确的加法运算
* @param value1 被加数
* @param value2 加数
* @return 两个数的和
*/
public static double plus(double value1, double value2){
BigDecimal b1 = new BigDecimal(String.valueOf(value1));
BigDecimal b2 = new BigDecimal(String.valueOf(value2));
return b1.add(b2).doubleValue();
}
/**
* 精确的减法运算
* @param value1 被减数
* @param value2 减数
* @return 两个数的差
*/
public static double subtract(double value1, double value2){
BigDecimal b1 = new BigDecimal(String.valueOf(value1));
BigDecimal b2 = new BigDecimal(String.valueOf(value2));
return b1.subtract(b2).doubleValue();
}
/**
* 精确的乘法运算
* @param value1 被乘数
* @param value2 乘数
* @return 两个数的积
*/
public static double multiply(double value1, double value2){
BigDecimal b1 = new BigDecimal(String.valueOf(value1));
BigDecimal b2 = new BigDecimal(String.valueOf(value2));
return b1.multiply(b2).doubleValue();
}
/**
* 精确的除法运算
* @param value1 被除数
* @param value2 除数
* @return 两个数的商
*/
public static double divide(double value1, double value2) throws IllegalAccessException {
BigDecimal b1 = new BigDecimal(String.valueOf(value1));
BigDecimal b2 = new BigDecimal(String.valueOf(value2));
return b1.divide(b2).doubleValue();
}
/**
* 损精度除法运算
* @param value1 被除数
* @param value2 除数
* @param scale 保留几位
* @return 两个数的商(损精度)
* @throws IllegalAccessException
*/
public static double divide(double value1, double value2,int scale) throws IllegalAccessException {
//如果精确范围小于0,抛出异常信息
if(scale<0){
throw new IllegalAccessException("精确度不能小于0");
}
BigDecimal b1 = new BigDecimal(String.valueOf(value1));
BigDecimal b2 = new BigDecimal(String.valueOf(value2));
return b1.divide(b2,scale).doubleValue();
}
/**
* 精确的四舍五入
* @param value 目标值
* @param scale 保留几位
* @return 四舍五入后的值
*/
public static double halfUp(double value,int scale) throws IllegalAccessException {
//如果精确范围小于0,抛出异常信息
if(scale<0){
throw new IllegalAccessException("精确度不能小于0");
}
return new BigDecimal(String.valueOf(value)).setScale(scale,RoundingMode.HALF_UP).doubleValue();
}
}