java double转换符_[转]java Double 类型比较运算符精度

java Double 类型比较运算符精度

觉得有用的话,欢迎一起讨论相互学习~

c8a597895237a09ffe2123824c14b080.png8611a7aff46786098b4f4e62a4f333be.pnge3fa8eb7b07286b650256b5033bef822.png

public class L26 {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

// double a= 300000;

double x= 300000.00000000003;//double比较,小数点后有效位

double y= 300000.000000000003;//主要注意的是double类型直接==/>=/<=的比较,涉及到有效位

System.out.println(x<=300000);

System.out.println(y<=300000);

}

}

/*

*output:

*false

true

* */

总结:double是双精度基本数据类型,double与double之间,涉及==(包括>=,<=)的比较,就得考虑double的精度问题。

如上面的例子,当x=300000.00000000003,与300000比较,得到的是false,说明300000.00000000003>300000;当y=300000.000000000003,与300000比较,得到的是true,说明300000.00000000003<=300000;(jvm实际判定的是300000.000000000003300000)猛然看上去,感觉不对啊,应该是大于啊。这就是double的精度问题。当小数点后位数 大于(17-6)11位时,jvm就会忽略这个精度,这时的y=300000.00000000000。所以jvm就会判定y300000.

这种情况,我们在开发时如果需要更精确的比较double类型,就要用到 BigDecimal 这个类了。(或者可以乘上一个较大的数1e7或8这种)

上面我为什么用17-6呢?看下这个例子:

public static void main(String[] args) {

double x= 3.0000000000000003;//double比较,小数点后有效位:17-(整数位)。总有效位为17位

double y= 30.000000000000003;//17位数字

double z= 300.00000000000003;

double w= 3000.0000000000003;

System.out.println(x==3);

System.out.println(y==30);

System.out.println(z==300);

System.out.println(w==3000);

System.out.println("--------------------分界线-------------------");

//小数后都加一个0

double x1= 3.00000000000000003;//18位数字

double y1= 30.0000000000000003;

double z1= 300.000000000000003;

double w1= 3000.00000000000003;

System.out.println(x1==3);

System.out.println(y1==30);

System.out.println(z1==300);

System.out.println(w1==3000);

}

}

/*

output:

false

false

false

false

--------------------分界线-------------------

true

true

true

true

*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值