當我用219除以317的Java 1
例如:奇數行爲使用雙打,我得到分割雙打時,在Java中
double b = 317/219;
System.out.println(b);
輸出是:1。
這是因爲它是一個重複的小數? 不得不使用BigDecimal而不是煩人的。
當我用219除以317的Java 1
例如:奇數行爲使用雙打,我得到分割雙打時,在Java中
double b = 317/219;
System.out.println(b);
輸出是:1。
這是因爲它是一個重複的小數? 不得不使用BigDecimal而不是煩人的。
嘗試編碼數字在Java中,這
double b = 317/219D;
默認類型爲int
,這樣的代碼,你有它的Java正與兩家int
數量和分工的結果那麼也會是int
,這將截斷小數部分以給出1
的最終結果。這int
結果然後投擲從int 1
到double 1
沒有編譯器警告,因爲它是擴大轉換(其中源類型被保證「適合」目標類型的一個)。
通過與後D
編碼或者數字作爲double
(你也可以使用d
,但我總是用大寫字母,因爲L
爲小寫l
看起來像一個1
),除法的結果將是double
太。
大多數其他的答案只是堅持'.0'強制浮點(雙)算術,但這個答案明確指出兩個操作數是double類型的;一個微妙而重要的點! –
我確信我會嘗試鑄造雙倍!猜猜我只是在愚蠢。謝謝您的幫助! – Joe
這是因爲你已經使用了整數文字,所以你正在做一個整數除法。
請嘗試寫入double b = 317.0/219.0;
。
這是int
劃分。寫:
double b = 317.0/219;
System.out.println(b);
因爲您輸入的數字是不公平的,所以是答案。
得到加倍,你需要或者使用大量浮點運算或投使用整數之一:
double b = 317.0/219;
System.out.println(b);
或:
double b = ((double)317)/219;
System.out.println(b);
值得一提的是,有沒有劃分在你的例子在運行時。在編譯時計算317/219(整數除法,丟棄分數)並用常數代替。如果你反編譯的.class(我用亞德http://www.kpdus.com/jad.html),你會看到
double b = 1.0D;
另一種選擇......
double b = (double)317/219;
輸出將1.0更加精確 –
[Java Integer除法:Ho你是否會產生雙重?](http:// stackoverflow。COM /問題/ 3144610/Java的整數除法,如何辦 - 你 - 生產 - 一個雙)。我選擇了我的選擇,但是這個問題在SO上被問了太多次。 – demongolem