2012-04-20 67 views
2

如何將樓層函數應用於float或double值以獲取整數。我得到double值:4.4497083717E10 float值:4.4497084E10超出我的函數。我的樓層值爲雙層樓層:4.4497083717E10 Float的底線:4.4497084416E10。是否有底線可能導致整數?樓層函數浮動和雙值

+0

您必須floor'後''申請round'。 – 2012-04-20 09:34:52

+0

@MarkoTopolnik爲什麼要將一個浮點數整數保證表示一個整數已經? – 2012-04-20 09:56:16

+0

@ChristianRau因爲你想要一個'長',這就是'圓'返回。 「double」永遠不會「代表」一個整數,它只是近似於它。正如安德烈·多伊爾(Andrzej Doyle)的回答所解釋的,另一種選擇是簡單地投入「長」。結果是完全一樣的,不同之處只在於你的品味,看起來更清潔。 – 2012-04-20 09:59:41

回答

4

。是否有可能發言的結果是一個整數?

從類型的角度 - 沒有。 Math.floor被聲明爲返回double,因此永遠不會返回靜態類型爲int的東西。

也就是說,該方法的文檔聲明返回的值是等於的整數。所以簡單地將返回的結果轉換爲int將始終爲您提供您期望的輸出。

(也就是說,假設你的結果是在範圍內。一個double可以容納更大的數字,一個int可以代表檢查出Narrowing primitive conversions的技術細節,你可能想越界檢查數據,以確保它總是明智的轉換爲int。)

1

4.4497083717E10太大而無法成爲int,您必須將其投射到long

鑄造到一個長期保持雙重的整個部分使其與Math.floor相同的值可以表示爲一個長期。即

long l = (long) Math.floor(4.4497083717E10); 

相同

long l = (long) 4.4497083717E10; 

System.out.println((int) Math.floor(4.4497083717E10)); 
System.out.println((long) Math.floor(4.4497083717E10)); 
System.out.println((long) 4.4497083717E10); 

打印

2147483647 -- due to an overflow 
44497083717 
44497083717