在比较大小时,千万不能用下面这种方式来比较大小
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);
来源:CSDN
作者:xiaozhaoTiAmo
链接:https://blog.csdn.net/xiaozhaoTiAmo/article/details/104592009