Java 两个看似相等的浮点数结果不等

# 代码
double x = 1.0-0.1-0.1-0.1-0.1-0.1
System.out.println(x == 0.5);

#输出
False

这里 x 不是精确等于0.5,而是0.5000000000000001。

解决办法:通过测试两个数的差是否小于某个非常小的的值EPSILON来判断。

当比较的两个数为double类型。通常设置EPSILON = 10^(-14)来比较。

当比较的两个数为float类型。通常设置EPSILON = 10^(-7)来比较。

# 代码
final double EPSILON = 1E-14;
double x = 1.0-0.1-0.1-0.1-0.1-0.1
System.out.println(Math.abs(x-0.5)<EPSILON);

#输出
True

P.S.epsilon “ε” 是一个希腊字母,常用于表示一个非常小的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值