2017-09-24 2 views
1

Ich habe ein Problem gegeben, um die Anzahl der Jahre (nbYear) zu berechnen, die es für eine Bevölkerung (p0) nehmen würde, auf eine bestimmte Anzahl von Menschen (p) zu steigen oder zu sinken die Bevölkerung würde prozentual (Prozent) und zusätzliche Personen (aug) pro Jahr zunehmen/abnehmen.Mathematische Gleichung mit gemischten Datentypen in 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; 
} 

}

Dieser Code wäre ok, aber ich erhalte eine mögliche verlustbehaftete Umwandlung von Doppelfehlern in int. Meine Frage ist, wie können Sie eine mathematische Gleichung mit gemischten Datentypen in diesem Fall int und double ohne Informationsverlust berechnen?

Jede Hilfe wird sehr geschätzt!

Antwort

0

Sie können einen double-Wert nicht einer Variablen int zuweisen, ohne den Datenverlust explizit zu behandeln. Eine Möglichkeit, dies zu tun ist, um explizit eine Verengung Guss zu int, unter der Annahme zu verwenden, dass eine Population nicht durch einen Teil einer Person zu erhöhen:

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

Gibt es wirklich keine andere Lösung beacuse dies tun würde von zu viel Datenverlust, so dass das Ergebnis nicht genau ist. – CWilliams

+0

@CWilliams könnte man 'Math.round' anstelle von Casting nennen, aber ich denke nicht, dass das genauer wäre. Betrachten Sie einen einfachen Fall - Sie beginnen mit 2 Personen und haben eine Wachstumsrate von 30%. 2 * 1,3 = 2,6. Was sollte die Bevölkerung im zweiten Jahr sein? 2 oder 3? – Mureinik

+0

Wenn Sie keinen Datenverlust haben möchten, führen Sie alle Berechnungen mit Doppelpunkten durch. Wenn Sie int anzeigen möchten, übergeben Sie das Ergebnis an int. – Christine

Verwandte Themen