java陷阱——浮点数相减

本文探讨了Java中浮点数运算的误差问题,并通过一个简单的例子展示了这种误差的具体表现。文章进一步解释了造成这一现象的原因在于计算机内部对浮点数的表示方式,并提供了一种使用BigDecimal类来避免此类问题的有效解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[code]
public class Test {

public static void main(String[] args) {
System.out.println(2.0 - 1.9);

}
}

计算的结果出乎意料:0.10000000000000009

但是加又没错。。为什么呢?

某大侠说:
计算机 无法处理浮点数值额...!!
为什么捏.~ 因为计算机 只能计算整数 浮点计算都是错误的.! 所以不能昂

怎么解决呢:在java中提供了专门的API来搞定。。具体怎么搞的我也不知道

用BigDecimal

public class Test {

public static void main(String[] args) {
System.out.println((new BigDecimal("2.0")).subtract(new BigDecimal("1.9")).doubleValue());
}
}

注意只能传String

b1.add(b2).doubleValue();//----加
b1.subtract(b2).doubleValue();//---减
b1.multiply(b2).doubleValue();//---乘
b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();//---除
注意:除要麻烦点。。。scale 表示表示需要精确到小数点以后几位, 定精度,以后的数字四舍五入。


[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值