2017-09-24 3 views
1

人口(p0)が特定の人数(p)に増減するのにかかる年数(nbYear)を計算する際に問題が発生しました。人口は1年に百万人民元(%)と追加人口(aug)で増減するだろう。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

データ損失を明示的に処理することなく、int変数にdoubleの値を割り当てることはできません。

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

が本当にへのになるだろうこれを行うbeacuse他の解決策がありません:これを行う方法の1つは、明示的に人口が人の一部で増加することができないという仮定の下で、intに絞り込み、キャストを使用することです多くのデータ損失が発生し、結果が正確ではありません。 – CWilliams

+0

@CWilliamsあなたはキャストの代わりに 'Math.round'を呼び出すことができますが、それはより正確ではないと私は考えています。単純なケースを考えてみましょう.2人で始まり、30%の成長率があります。 2 * 1.3 = 2.6。 2年目の人口はどうなるでしょうか? 2または3? – Mureinik

+0

データを消失させたくない場合は、倍精度ですべての計算を実行します。 intとして表示する場合は、結果をintにキャストします。 – Christine

関連する問題