阅读356 返回首页    go 阿里云 go 技术社区[云栖]


java中BigDecimal的应用

 

我们来看一看java中BigDecimal的用法

 

public class MathUtil {


// 加法
public static Double add(double a,double b,int scal) throws Exception{

    BigDecimal add1 = conversionToBigDecimal(a);
    BigDecimal add2 = conversionToBigDecimal(b);
    Double result = add1.add(add2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
    return result;
}

 

// 减法
public static Double subtract(double a,double b,int scal) throws Exception{

    BigDecimal subtract1 = conversionToBigDecimal(a);
    BigDecimal subtract2 = conversionToBigDecimal(b);
    Double result = subtract1.subtract(subtract2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
    return result;
}


// 乘法
public static Double multiply(double a,double b,int scal) throws Exception{

    BigDecimal multiply1 = conversionToBigDecimal(a);
    BigDecimal multiply2 = conversionToBigDecimal(b);
    Double result = multiply1.multiply(multiply2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
    return result;
}

 
// 除法
public static Double divide(double a,double b,int scal) throws Exception{

    BigDecimal divide1 = conversionToBigDecimal(a);
    BigDecimal divide2 = conversionToBigDecimal(b);
    Double result = divide1.divide(divide2,scal,BigDecimal.ROUND_HALF_UP).doubleValue();
    return result;

}

 

// 类型转换

public static BigDecimal conversionToBigDecimal(Object obj) throws Exception
{
  if (obj instanceof Double)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Float)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Integer)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Long)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Byte)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Short)
  {
   return new BigDecimal(obj.toString());
  }
  else
  {
   throw new Exception("不能转换");
  }
}

 

 

下面我们来看看BigDecimal的setScale方法

 

BigDecimal.setScale()方法用于格式化小数点

 

表示保留一位小数,默认用四舍五入方式
setScale(1)

 

直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_DOWN)

 

进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_UP)

 

四舍五入,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)

 

四舍五入,2.35变成2.3,如果是5则向下舍
setScaler(1,BigDecimal.ROUND_HALF_DOWN)

 


注意点一

scale指的是你小数点后的位数。scale()就是BigDecimal类中的方法。如
BigDecimal b = new BigDecimal("123.456");
b.scale(),返回的就是3

 


注意点二

roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种,如
BigDecimal.ROUND_HALF_UP表示的就是4舍5入

 


注意点三

pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的

 


注意点四

对于一般add、subtract、multiply方法的小数位格式化如下
BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("mData=" + mData);
 

 

 

原帖地址:

https://blog.csdn.net/ahwr24/article/details/7048724

https://blog.csdn.net/zb48857441/article/details/6180958

 

 

 

最后更新:2017-04-03 07:57:23

  上一篇:go java中一个汉字和一个字母所占内存字节比较以及后台验证的减半处理
  下一篇:go 开发人员对测试人员最常说的20句话