java double比较大小

double和float不能表达每个数值,他们是使用近似来表示值的。

考虑一下下面例子的输出内容

public classOne{
 publicstaticvoidmain(String[] args)
 {
      double a = 1.000001;
     doubleb = 0.000001;
     doubled = a - b;
     System.out.println(d);
     System.out.println(d==1.0);
 }
}

     结果是false。Java程序员经常犯的一个错误是,在循环中使用浮点数和用==运算符检查条件,在最坏的情况下,这可能会创建一个无限循环,导致Java应用程序挂起。所以我们不应该用==进行精确比较,应该这样做:

public classOne{
 publicstaticvoidmain(String[] args)
 {
      double a = 1.000001;
     doubleb = 0.000001;
     doubled = a - b;
     if(Math.abs(d-1.0)<= 0.000001)
     {
      System.out.println("the are equal");
     }
 }
}

     对于double值,我们应该做计算而不是比较,总是比较近似而不是精确的值。例如:当需要比较值是不是等于10.00的时候,我们用是否> 9.95来表示,如下所示:

if (amount == 100.00) // Not Ok
if (amount > 99.995) // Ok

参考文档

http://www.java67.com/2015/09/float-and-double-value-comparison-in-java-use-relational.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值