BigDecimal用法

BigDecimal

为什么使用BigDecimal

由于浮点数采用二进制系统表示,而二进制无法精确的表示1/10,好比十进制无法精确表示1/3一样。因此,对于很多值浮点数都是采用其能够表示的离目标值近的数来表示,这有可能会在计算中带来不易察觉的误差。为了解决基本数据类型浮点数不能进行精确计算的问题,Java中专门提供了java.math.BigDecimal类,其提供浮点数的精确计算功能。

BigDecimal的用法

1.加减乘除

2.设置精度

3.取反

加减乘除分别调用函数

    public BigDecimal add(BigDecimal value);  
    public BigDecimal subtract(BigDecimal value);  
    public BigDecimal multiply(BigDecimal value);  
    public BigDecimal divide(BigDecimal value);  

举例:
    BigDecimal a=new BigDecimal(10.0);  
    BigDecimal b=new BigDecimal(9.1);  
    System.out.println(a.subtract(b));  

精度设置,为什么会设置精度,给大家看个效果

代码如下:

    BigDecimal abig=new BigDecimal(10.0);  
    BigDecimal bbig=new BigDecimal(9.1);  
    BigDecimal cbig=new BigDecimal(8.9);
    System.out.println(abig.subtract(bbig));  
    System.out.println(abig.subtract(cbig));  

结果如下:

    0.9000000000000003552713678800500929355621337890625  
    1.0999999999999996447286321199499070644378662109375  

并不是我们希望看到的0.9和1.1,原因就是转成二进制的时候会有精度问题,导致这样的结果。所以我们可以在运算的时候加精度,也可以在实例化BigDecimal的时候用字符串。

设置精度的方法:

    System.out.println(abig.subtract(bbig).setScale(2, BigDecimal.ROUND_HALF_UP));  
    System.out.println(abig.subtract(cbig).setScale(2, BigDecimal.ROUND_HALF_UP));  

这样设置两位精度就可以啦

    0.90  
    1.10  
字符串实例化的方法:
    BigDecimal abig=new BigDecimal("10.0");  
    BigDecimal bbig=new BigDecimal("9.1");  
    BigDecimal cbig=new BigDecimal("8.9");  

取反

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

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

这样就会拿到它的相反数了:

-10.0  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值