java中的数字精确计算

java中计算有时候会有误差,比如举个简单的例子:

    public class Test{

  public static void main(String[] args) {
  System.out.println(1.9+0.3);}}

   控制台输出的结果是2.1999999999999997,而把式子换成1.9+0.2可以在控制台输出正确结果2.1,1.9+0.4也可以在控制台输出正确的结果2.3。我又测试了很多,发现有时候有的式子就是不能精确计算,也没有找到什么规律。因为计算机计算的时候先是转换成二进制,再返回人类可以识别的数字,float类型的计算常出现这种问题。那么怎么让float活着double类型精确计算呢?

    这时候就需要借助BigDecimal类,还是刚才的问题,更换一下代码:

public class Test{

  public static void main(String[] args) {
 double a=1.9;
 double b=0.3;

 //创建BigDecimal对象,把a当做参数传入
 BigDecimal bj1=new BigDecimal(Double.toString(a));
 BigDecimal bj2=new BigDecimal(Double.toString(b));

 //以add方法做加的运算
 double result=bj1.add(bj2).doubleValue();
  System.out.println(result);
  }}

 这样就可以正确输出结果2.2了。

 在扩展一下,这里加是add()方法,乘是multiply()方法,减是subtract()方法,除以是divide()方法,只不过不能整除的时候会抛出异常:java.lang.ArithmeticException。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值