JAVA中浮点数的一些注意事项

在比较大小时,千万不能用下面这种方式来比较大小

System.out.println(0.1+0.2 == 0.3);

这是很危险的,很显然,结果是false
在这里插入图片描述
在计算机中存储的都是二进制数,十进制中的一些有限小数,如:0.3在计算机中存储就有可能是无限循环小数,就不能直接用“==”进行比较。一般都是用下面的方式来进行比较:

System.out.println(Math.abs(0.1+0.2-0.3)< 1e-6);

一般浮点数来比较,都是要求足够接近,一般10的-6次方就差不多可以认为相等了。
在这里插入图片描述
还有就是,类似这种的

System.out.println(1/0);

很显然会抛出java.lang.ArithmeticException: / by zero的异常
但是,如果换成这个

System.out.println(1.0/0);

会得到这样的一个结果
在这里插入图片描述
Infinitly即无限大的意思,这个时候,计算机是在计算一个浮点数与一个无限小的数的商,肯定就是无穷大了。
在IEEE754还有一些特殊值

double x = 1.0/0;
System.out.println(x+x);
System.out.println(1/x);
System.out.println(x*-1);
System.out.println(1/(-x));
System.out.println(x-x);

得到的结果如下:
在这里插入图片描述
这里的NaN的意思是,Not a Number,即它不是一个数字。你再进行任何计算时,得到的都是NaN。如下面这样:

double x = 0.0/0;
System.out.println(x);
System.out.println(x+1000);
System.out.println(x*2);

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值