为什么用浮点(或双精度)数字除以零不会抛出java.lang.ArithmeticException:/在Java中被零
以下语句抛出显而易见。java.lang.ArithmeticException: / by zero
System.out.println(0/0);
因为文字被认为是文字,并且在整数算术中不允许除以零。0
int
但是,以下情况不会引发任何异常,例如 。java.lang.ArithmeticException: / by zero
int a = 0;
double b = 6.199;
System.out.println((b/a));
它显示 。Infinity
以下语句生成(不是数字)无一例外。NaN
System.out.println(0D/0); //or 0.0/0, or 0.0/0.0 or 0/0.0 - floating point arithmetic.
在这种情况下,两个操作数都被视为双精度。
同样,以下语句不会引发任何异常。
double div1 = 0D/0; //or 0D/0D
double div2 = 0/0D; //or 0D/0D
System.out.printf("div1 = %s : div2 = %s%n", div1, div2);
System.out.printf("div1 == div2 : %b%n", div1 == div2);
System.out.printf("div1 == div1 : %b%n", div1 == div1);
System.out.printf("div2 == div2 : %b%n", div2 == div2);
System.out.printf("Double.NaN == Double.NaN : %b%n", Double.NaN == Double.NaN);
System.out.printf("Float.NaN == Float.NaN : %b%n", Float.NaN == Float.NaN);
它们产生以下输出。
div1 = NaN : div2 = NaN
div1 == div2 : false
div1 == div1 : false
div2 == div2 : false
Double.NaN == Double.NaN : false
Float.NaN == Float.NaN : false
它们都返回 为什么使用浮点数或双精度数允许此操作(除以零)?false.
顺便说一句,我可以理解浮点数(双精度数)的值表示正无穷大,负无穷大,而不是数字()...NaN