Java中1/0和1.0/0的结果
2020-10-15 本文已影响0人
lenny611
1/0结果老生常谈了,会抛出java.lang.ArithmeticException: / by zero;
而1.0/0结果则是Infinity(无穷大),结果如下:
image.png
原因是因为IEEE 754标准,该标准规定浮点数/0等于正无穷或负无穷。而Java也正是这样做的。直接看下图:
程序执行及结果
由上图可以看到,浮点数定义了正无穷大以及负无穷大,且1.0/0可以得到正无穷大,-1.0/0可以得到负无穷大。再看看Double中关于无穷大的定义,定义如下:
Double中无穷大以及非数的定义
所以可以知道为什么1.0/0==Infinity为true(负数同理)了,因为它就是这么定义的。
其中NaN表示非数,Java中提供Double.isNaN(double v)方法来判断是否为非数。
同样的,Double.isInfinite(double v)方法可以判断是否为正无穷大或者负无穷大,该方法的具体定义如下:
方法定义
所以无论是正无穷大还是负无穷大,都可以使用该方法来判断。
Double中还有一个方法Double.isFinite(double v)与Double.isNaN(double v)相反,它可以判断这个是否可以转化为一个数字。