java浮点数相加_java中的浮点数相加

本文探讨了浮点数在二进制运算中可能出现的精度误差问题,例如418.48d + 7121.88d得到7540.360000000001。为了解决这个问题,文章介绍了使用`BigDecimal`类来确保精确计算的方法,展示了如何将double转换为BigDecimal进行加法操作,从而得到正确结果7540.36。
摘要由CSDN通过智能技术生成

今天遇到一个比较有意思的问题,就是两个浮点数相加怎么都得不到正确的答案,刚开始也很纳闷,后来通过在网上找资料后,明白了原来浮点数用2进制进行加减的话确实是会出现这种情况的,也找到了解决办法,所以记录下来,也算是一个比较有意思的认识吧!

首先我们来看看两个带小数的浮点数相加会是什么样子的

package com.controller;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

double a = 418.48d;

double b = 7121.88d;

double c = a+b;

System.out.println(c);

}

}

输出结果为

7540.360000000001

原因是浮点数的二进制相计算的时候会有一定的误差,原因我们下次再深入探讨,下面我们来看解决办法

package com.controller;

import java.math.BigDecimal;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

double a = 418.48d;

double b = 7121.88d;

BigDecimal a1 = new BigDecimal(String.valueOf(a));

BigDecimal b1 = new BigDecimal(String.valueOf(b));

BigDecimal c = a1.add(b1);

System.out.println(c.doubleValue());

}

}

输出结果为

7540.36

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>