为什么1/0给出错误但1/0.0返回"Inf"?

Fáb*_*rez 28 java double int

我只是好奇这个:

1/0在Java中进行评估时,会发生以下异常:

线程"main"中的异常java.lang.ArithmeticException:/在Foo.main中为零(Foo.java:3)

但是1/0.0被评估为Infinity.

public class Foo {
    public static void main (String[] args) {
        System.out.println(1/0.0);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

nin*_*alj 30

那是因为整数没有+/- Inf,NaN的值,并且不允许除以0,而浮点数确实具有这些特殊值.


Kri*_*ssy 11

1/0是两个int的除法,并抛出一个异常,因为你不能除以整数零.但是,0.0是double类型的文字,Java将使用浮点除法.IEEE浮点规范具有除以零的特殊值(除其他外),其中一个是double .Infinity.

如果您对细节感兴趣,浮点规范(通常含糊不清)在维基百科上有一个页面:http://en.wikipedia.org/wiki/IEEE_754-2008,其全文也可以在线阅读:http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber = 4610933.

  • 不幸的是,Java不允许设置IEEE 754-2008陷阱.如果你在代码中写入1/0.0,那么Infinity的来源就显而易见了,但是如果你从一个有很多数字的函数中得到一个NaN,那么[找出究竟出了什么问题并不简单](http:// stackoverflow.com/questions/2140501/java-maths-testing-for-nan). (3认同)