java double相加_解决java中两个double类型的值相加

代码:

/**

* 提供精确的加法运算

* @param v1 被加数

* @param v2 加数

* @return 两个参数的和

*/

public static double add(double v1, double v2)

{

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.add(b2).doubleValue();

}

/**

* 提供精确的减法运算

* @param v1 被减数

* @param v2 减数

* @return 两个参数的差

*/

public static double sub(double v1, double v2)

{

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.subtract(b2).doubleValue();

}

/**

* 提供精确的乘法运算

* @param v1 被乘数

* @param v2 乘数

* @return 两个参数的积

*/

public static double mul(double v1, double v2)

{

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.multiply(b2).doubleValue();

}

原文链接:https://blog.youkuaiyun.com/tanyongbing1988/article/details/45666181

在程序中,两个double类型相加出现误差的主要原因是浮点数的内部表示方式和精度问题。浮点数在计算机中使用二进制来表示,但有些十进制数无法精确地表示为有限位数的二进制表示,因此会引发舍入误差。 要解决这个问题,我们可以采取以下几个方法: 1. 使用BigDecimal类:BigDecimal类可以提供高精度的十进制运算,可以避免浮点数运算中的舍入误差。可以先将两个double数转换为BigDecimal对象,然后使用add方法进行相加。 2. 当需要比较两个浮点数是否相等时,可以采用比较它们的差小于某个极小的方法,而不是直接比较它们是否完全相等。例如,可以定义一个极小epsilon,并判断Math.abs(a - b) < epsilon来比较。 3. 将浮点数转换为整数进行计算。可以将两个double数乘以一个合适的倍数(如10000),然后将其转换为整数进行相加操作。最后再将结果除以相同的倍数,得到精确的结果。 4. 在使用浮点数的时候,应尽量避免累加操作。因为每次累加都会引入额外的舍入误差。可以尽量减少累加操作,并在必要时使用中间变量来存储结果,以避免精度损失。 综上所述,避免浮点数运算误差的方法包括使用BigDecimal类、比较差、转换为整数运算以及避免累加操作等。在实际编程中,我们需要根据具体情况选择最适合的方法来解决浮点数误差问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值