importorg.junit.Test;importjava.math.BigDecimal;importjava.math.MathContext;/***@authorceshi
* @Title: BigDecimalUtil
* @ProjectName BigDecimalUtil
* @Description: TODO
* @date 2018/7/2719:30*/
public classBigDecimalUtil {
@Testpublic voidtest(){
System.out.println(add(0.02,0.03));
System.out.println(subtraction(0.05,0.03,2));
System.out.println(multiplication(0.2,0.3));
System.out.println(division(0.02,0.03,2));
System.out.println(divisionRounding(0.5,0));
}/*** double加法
*@parama
*@paramb
*@return
*/
public double add(double a, doubleb) {
BigDecimal b1=newBigDecimal(a);
BigDecimal b2= newBigDecimal(b);returnb1.add(b2).doubleValue();
}/*** double减法
*@parama
*@paramb
*@paramsetPrecision 设置精度
*@return
*/
public static double subtraction(double a, double b,intsetPrecision) {
BigDecimal b1= newBigDecimal(a);
BigDecimal b2= newBigDecimal(b);return b1.subtract(b2,newMathContext(setPrecision)).doubleValue();
}/*** double乘法 结果保留两位小数
*@parama
*@paramb
*@return
*/
public static double multiplication(double a, doubleb) {
BigDecimal b1= newBigDecimal(a);
BigDecimal b2= newBigDecimal(b);returnb1.multiply(b2).doubleValue();
}/*** double除法
*@parama
*@paramb
*@paramaccurate 结果保留位数
*@return
*/
public static double division(double a, double b,intaccurate) {if (accurate < 0) {throw new RuntimeException("精确度必须是正整数或零");
}
BigDecimal b1= newBigDecimal(a);
BigDecimal b2= newBigDecimal(b);returnb1.divide(b2, accurate, BigDecimal.ROUND_HALF_UP).doubleValue();
}/*** double除法 四舍五入
*@parama
*@paramscale accurate 小数点后留几位
*@return
*/
public static double divisionRounding(double a, intscale) {if (scale < 0) {throw new RuntimeException("精确度必须是正整数或零");
}
BigDecimal b= newBigDecimal(a);
BigDecimal one= new BigDecimal("1");returnb.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}