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

别等时光非礼了梦想. 提交于 2020-03-01 20:20:48

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

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);

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!