2016-02-01 64 views
0

我嘗試這樣做:NaN是否等於0?

int x = (int)Math.sqrt(-1); //Math.sqrt(-1) returns NaN 
System.out.println(x); 

並且輸出是:

This Wikipedia article說:

轉換NaN爲整數類型,或執行一個整數操作,其浮點數int等價物會產生NaN,通常會引發異常。在Java中,這樣的操作拋出的java.lang.ArithmeticException

實例,但我的代碼運行正常,沒有任何異常,且輸出爲0

有什麼理由呢?

回答

3

不,NaN不等於任何東西,包括它本身。

當將NaN強制轉換爲int時,JVM將對零進行四捨五入。這解釋了你觀察到的0的輸出。

+0

那麼,爲什麼我的代碼給出輸出'0'? – Hackerdarshi

+0

@Bathsheba雖然這回答了題目中的問題,但提供解釋代碼片斷的行爲方式會有所幫助。 – SarathChandra

+1

@Hackerdarshi [這個問題是重複的問題](http://stackoverflow.com/questions/5876369/why-does-casting-double-nan-to-int-not-throw-an-exception-in -java)涵蓋了這一點。 – khelwood