【发布时间】:2014-09-12 18:26:04
【问题描述】:
为什么数字除以零会有如此不同的答案:
我的代码:
class Test {
public static void main(String[] args){
int a = (int)(3/0.0F);
System.out.println(a);
System.out.println(3/0.0F);
System.out.println(3/0);
}
}
输出:
2147483647
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
每次我将一个数字除以一个整数(字节、短整数、整数、长整数)时,它都会抛出 ArithmeticException,而在处理实数(浮点数、双精度数)时情况并非如此。为什么?
【问题讨论】:
-
因为浮点被设计为在这种情况下返回 NaN。这是一个带外值。整数没有带外值,因此需要例外。
-
如果你不知道 OP - NaN 代表“非数字”。
-
您知道,
2147483647输出是因为您将无穷大(如下一个输出所示)转换为整数,因此它将继续滚动整数范围并最终取最大可能值(2^31-1 或 2147483647) -
@HimanshuAggarwal JLS #5.1.3:"这个值一定是太大了(一个很大的正值或者正无穷大),第一步的结果是int或者long类型的最大可表示值。”
-
@EJP 有限数除以零不会产生 NaN,而是浮点数的无穷大。只有 0.0/0.0 产生 NaN。
标签: java exception casting floating-point integer