2012-12-02 48 views
14

當我用219除以317的Java 1
例如:奇數行爲使用雙打,我得到分割雙打時,在Java中

double b = 317/219; 
System.out.println(b); 

輸出是:1。

這是因爲它是一個重複的小數? 不得不使用BigDecimal而不是煩人的。

+0

輸出將1.0更加精確 –

+0

[Java Integer除法:Ho你是否會產生雙重?](http:// stackoverflow。COM /問題/ 3144610/Java的整數除法,如何辦 - 你 - 生產 - 一個雙)。我選擇了我的選擇,但是這個問題在SO上被問了太多次。 – demongolem

回答

22

嘗試編碼數字在Java中,這

double b = 317/219D; 

默認類型爲int,這樣的代碼,你有它的Java正與兩家int數量和分工的結果那麼也會是int,這將截斷小數部分以給出1的最終結果。這int結果然後投擲從int 1double 1沒有編譯器警告,因爲它是擴大轉換(其中源類型被保證「適合」目標類型的一個)。

通過與後D編碼或者數字作爲double(你也可以使用d,但我總是用大寫字母,因爲L爲小寫l看起來像一個1),除法的結果將是double太。

+1

大多數其他的答案只是堅持'.0'強制浮點(雙)算術,但這個答案明確指出兩個操作數是double類型的;一個微妙而重要的點! –

+0

我確信我會嘗試鑄造雙倍!猜猜我只是在愚蠢。謝謝您的幫助! – Joe

3

這是因爲你已經使用了整數文字,所以你正在做一個整數除法。

請嘗試寫入double b = 317.0/219.0;

0

這是int劃分。寫:

double b = 317.0/219; 
System.out.println(b); 
0

因爲您輸入的數字是不公平的,所以是答案。
得到加倍,你需要或者使用大量浮點運算或投使用整數之一:

double b = 317.0/219; 
System.out.println(b); 

或:

double b = ((double)317)/219; 
System.out.println(b); 
2

值得一提的是,有沒有劃分在你的例子在運行時。在編譯時計算317/219(整數除法,丟棄分數)並用常數代替。如果你反編譯的.class(我用亞德http://www.kpdus.com/jad.html),你會看到

double b = 1.0D; 
5

另一種選擇......

double b = (double)317/219; 
-2

你可以嘗試

double b = 0.0; 
b = 317/219; 

,這樣我可以返回小數點

+0

這不是正確的答案。 317和219都是int,因此結果將成爲除法的整數部分,而不管參數類型是什麼。 – zohar

+0

可以有很多事情可以比上面嘗試其他。然而,@Joe一直無法理解Java中的算術工作原理。這根本不應該是一個答案。 – prageeth