2017-09-24 7 views
1

On m'a donné un problème pour calculer le nombre d'années (nbYear) qu'il faudrait pour qu'une population (p0) augmente ou diminue jusqu'à un certain nombre de personnes (p) si la population augmenterait/diminuerait selon le pourcentage (pourcentage) et les personnes supplémentaires (août) par année.Une équation mathématique avec des types de données mixtes en 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; 
} 

}

Ce code serait ok, mais j'obtenir une conversion possible de la double lossy int erreur. Ma question est comment pouvez-vous calculer une équation mathématique avec des types de données mixtes dans (ce cas int et double) sans perte d'information?

Toute aide est très appréciée!

Répondre

0

Vous ne pouvez pas affecter une valeur double à une variable int sans gérer explicitement la perte de données. Une façon de faire est d'utiliser explicitement une distribution de rétrécissement à int, en supposant qu'une population ne peut pas augmenter d'une partie d'une personne:

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

Est-il vraiment pas d'autre solution beacuse faisant cela ferait de la beaucoup de perte de données rendant ainsi le résultat inexact. – CWilliams

+0

@Cilliams vous pourriez appeler 'Math.round' au lieu de lancer, mais je ne pense pas que ce serait plus précis. Considérons un cas simple - vous commencez avec 2 personnes et vous avez un taux de croissance de 30%. 2 * 1,3 = 2,6. Quelle devrait être la population en deuxième année? 2 ou 3? – Mureinik

+0

Si vous ne voulez pas de perte de données, effectuez tous les calculs avec des doubles. Si vous voulez afficher int, cast à int le résultat. – Christine