2012-10-27 74 views
1

所以,我的任務中有一個問題。它是「添加分數(1/10)+(2/9)+(3/8)+(4/7)+(5/6)+(6/5)+(7/4)+(8/3 )+(9/2)+(10/1),輸出應爲4位小數點「。我寫了一個循環,使用1和10的值隨着我的增加而遞減。它似乎沒有提出正確的答案。它應該是22.218650 ...等,因爲我還沒有限制小數位數,但它沒有給出正確的答案。我得到的輸出是18.0。Java將系列分數加在一起

public class AddThemUp { 
    // instance variables - replace the example below with your own 

    public static void main(String [] args) { 
    int i; 
    int numer = 1; 
    int denom = 10; 
    double addUp = 0.0; 

    for (i = 1; i <= 10; i++) { 
     addUp = (numer/denom) + addUp; 
     numer++; 
     denom--; 
    } 
    System.out.println(addUp); 
    } 
} 

addUp println只是爲了看看數學是否正常工作,然後再嘗試找出小數點後的分隔符。我是不是正確地使用了double,還是應該把numer和denom加倍?任何幫助,將不勝感激。

回答

1

你在做int分區,其中總是返回一個int - 不是你想要的結果。你需要做雙師這個工作。鑄造分子或分數的分母雙:

((double) numerator/denominator) 
+0

非常好!知道我錯過了一些操作。謝謝一堆。如果數字和denom是雙重的,它會起作用嗎? – user1588867

+0

@ user1588867:那麼你的循環可能會搞砸。最好把int當作int來保留,當你需要的時候把它轉換成double。 –

+0

謝謝。改變了它,現在它工作。剛剛使用DecimalFormat類,現在可以正確打印所有內容。 – user1588867

1

,是你的部門(numer/denom)轉換爲int所以在結果所有十進制值都將丟失。將其中一個值轉換爲十進制在您的計算中使用了double。如下:

addUp = ((double)numer/denom) + addUp; 

您將得到您的預期結果。