2017-09-24 83 views
1

我已經給出了一個問題來計算人口(p0)上升或下降到一定數量的人(p)所需的年數(nbYear)if人口將增加/減少百分比(百分比)和額外的人(一年)。在java中使用混合數據類型的數學公式

public static int nbYear(int p0, double percent, int aug, int p) { 
    int nbYear = 0; 
    while(p0 < p){ 
     p0 = p0 + (p0 * percent) + aug; 
     nbYear = nbYear + 1; 
    } 
    return nbYear; 
} 

}

該代碼將是確定的,但我得到雙倍可能有損轉換爲int的錯誤。我的問題是,如何計算一個混合數據類型的數學方程(在這種情況下爲int和double)而沒有任何信息丟失?

任何幫助非常感謝!

回答

0

無法明確處理數據丟失,您無法將double值分配給int變量。要做到這一點的方法之一是明確使用某個狹窄投給int,在假設人口不能由一個人的部分增加:

p0 = p0 + (int)(p0 * percent) + aug; 
// Here --^ 
+0

難道真的沒有怎麼一回事,因爲這樣做會使得任何其他解決方案很多數據丟失,從而導致結果不準確。 – CWilliams

+0

@CWilliams你可以調用'Math.round'而不是投射,但我認爲這不會更準確。考慮一個簡單的例子 - 你從2人開始,增長率爲30%。 2 * 1.3 = 2.6。第二年人口應該怎樣? 2或3? – Mureinik

+0

如果您不想丟失數據,請使用雙打執行所有計算。如果你想顯示爲int,則將結果轉換爲int。 – Christine