BigDecimal类的使用方法详解

来源:互联网 发布:java中不合法的标识符 编辑:程序博客网 时间:2024/06/09 13:54

前言

BigDecimal可以处理任意长度的浮点数运算,以下是对他的常用方法的总结

加减乘除

调用的函数:

public BigDecimal add(BigDecimal value);        //加法运算public BigDecimal subtract(BigDecimal value);   //减法运算public BigDecimal multiply(BigDecimal value);   //乘法运算public BigDecimal divide (BigDecimal value,RoundingMode mode);//除法运算,第二个参数为精度

举例:

BigDecimal a = new BigDecimal(10.0);BigDecimal b = new BigDecimal(9.1);System.out.println(a.add(b));System.out.println(a.subtract(b));System.out.println(a.multiply(b)); 

结果:

19.0999999999999996447286321199499070644378662109375  0.9000000000000003552713678800500929355621337890625  90.9999999999999964472863211994990706443786621093750  

精度设置

看了上面的例子,很明显的发现了一个问题——精度问题,事实上,正是因为转成二进制的时候产生了精度的问题,才会导致初这样的结果,所以我们需要在运算时添加精度。
设置精度的方法:

public BigDecimal setScale(int scale, RoundingMode roundingMode)
setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

注释:

  1. scale指的是你小数点后的位数。比如123.456则scale就是3.
    比如:BigDecimal b = new BigDecimal(“123.456”);
    b.scale(),返回的就是3.
  2. roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种。
    比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。

当然还有一种方式可以设置精度,就是在在实例化BigDecimal的时候用字符串。

BigDecimal abig=new BigDecimal("10.0");  BigDecimal bbig=new BigDecimal("9.1");  BigDecimal cbig=new BigDecimal("8.9");  

关于除法的详细说明

public BigDecimal divide (BigDecimal value,int scale,RoundingMode mode);

相信此时的你应该也了解了各种参数的意思了

取反

因为Bigdecimal是无法直接用+-*/这些符号进行计算的,所以取反的时候也需要一个单独的方法来实现:

public BigDecimal negate()

举例:

System.out.println(abig.negate());  

结果:

-10.0    
原创粉丝点击