由于Java的简单类型不能够精确的对浮点数进行运算这个工具类提供精确的浮点数运算包括加减乘除和四捨五入
以下为代码
import javamathBigDecimal;
public class Arith {
//默认除法运算精度
private static final int DEF_DIV_SCALE = ;
//这个类不能实例化
private Arith(){
}
/**
* 提供精确的加法运算
* @param v 被加数
* @param v 加数
* @return 两个参数的和
*/
public static double add(double vdouble v){
BigDecimal b = new BigDecimal(DoubletoString(v));
BigDecimal b = new BigDecimal(DoubletoString(v));
return badd(b)doubleValue();
}
/**
* 提供精确的减法运算
* @param v 被减数
* @param v 减数
* @return 两个参数的差
*/
public static double sub(double vdouble v){
BigDecimal b = new BigDecimal(DoubletoString(v));
BigDecimal b = new BigDecimal(DoubletoString(v));
return bsubtract(b)doubleValue();
}
/**
* 提供精确的乘法运算
* @param v 被乘数
* @param v 乘数
* @return 两个参数的积
*/
public static double mul(double vdouble v){
BigDecimal b = new BigDecimal(DoubletoString(v));
BigDecimal b = new BigDecimal(DoubletoString(v));
return bmultiply(b)doubleValue();
}
/**
* 提供(相对)精确的除法运算当发生除不尽的情况时精确到
* 小数点以后位以后的数字四捨五入
* @param v 被除数
* @param v 除数
* @return 两个参数的商
*/
public static double div(double vdouble v){
return div(vvDEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算当发生除不尽的情况时由scale参数指
* 定精度以后的数字四捨五入
* @param v 被除数
* @param v 除数
* @param scale 表示表示需要精确到小数点以后几位
* @return 两个参数的商
*/
public static double div(double vdouble vint scale){
if(scale< ){
throw new IllegalArgumentException(
The scale must be a positive integer or zero);
}
BigDecimal b = new BigDecimal(DoubletoString(v));
BigDecimal b = new BigDecimal(DoubletoString(v));
return bdivide(bscaleBigDecimalROUND_HALF_UP)doubleValue();
}
/**
* 提供精确的小数位四捨五入处理
* @param v 需要四捨五入的数字
* @param scale 小数点后保留几位
* @return 四捨五入后的结果
*/
public static double round(double vint scale){
if(scale< ){
throw new IllegalArgumentException(
The scale must be a positive integer or zero);
}
BigDecimal b = new BigDecimal(DoubletoString(v));
BigDecimal one = new BigDecimal();
return bdivide(onescaleBigDecimalROUND_HALF_UP)doubleValue();
}
}