2014-07-22 60 views
3

爲什麼會有如此不同的答案上劃分數由零:算術異常:/零隻適用於整數中的Java

我的代碼:

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 

每我用一個整數(byte,short,int,long)來分割一個數字,它會拋出ArithmeticException,而用實數(float,double)完成時則不是這種情況。爲什麼?

+2

因爲在這種情況下浮點被設計爲返回NaN。這是一個帶外價值。整數沒有帶外值,因此需要例外。 – EJP

+1

如果您不知道OP - NaN代表「不是數字」。 – csmckelvey

+0

@EJP - 我想知道他們爲什麼在零除零的情況下對浮動和整數有不同的規則。 –

回答

5

JLS §15.17.2

  • 司由零所導致符號的無窮非零有限值的。標誌由上述規則決定。

與該異常:

如果除數的一個整數除法的值是0,則一個 則拋出ArithmeticException。

+0

一個顯而易見的問題是「爲什麼他們以一種不合適地處理浮點和整數算術的方式編寫規範?」 –

+4

@mikez顯而易見的答案是「IEEE 754」,缺乏一種方法來實現整數,因爲沒有完整的'NaN.' – EJP