我写的Java程序输出为"Infinity",但我应该得到一个数字。我使用的是float类型,我不认为我的数字超出了float可以处理的范围。
我的问题是:当Java计算的值大于所使用的数据类型的处理范围时,我是否会获得"Infinity"作为输出?或者只有在我无意中除以零时才返回"Infinity"?
我的问题是:当Java计算的值大于所使用的数据类型的处理范围时,我是否会获得"Infinity"作为输出?或者只有在我无意中除以零时才返回"Infinity"?
JLS明确回答了这个问题。
浮点运算溢出会产生一个有符号的无穷大。
你可能在某处进行了除以零的操作,但你可以进行检查。
double b = 1.1*Double.MAX_VALUE;
System.out.println(b);
这会显示为无穷大。
Operation Result
n ÷ ± Infinity 0
±Infinity × ±Infinity ±Infinity
±nonzero ÷ 0 ±Infinity
Infinity + Infinity Infinity
±0 ÷ ±0 NaN
Infinity - Infinity NaN
±Infinity ÷ ±Infinity NaN
±Infinity × 0 NaN
float result = A / B;
每当您看到这样的代码时,您可以使用这个简单的打印语句:float result = A / B;
System.out.format("Divisor: %d, Dividend: %d, result: %d", A, B, result);
// alternatively, add in the stack trace stuff.