[java] mon prg donne une erreur de calcul
domxaline
-
issemgane Messages postés 32 Statut Membre -
issemgane Messages postés 32 Statut Membre -
Bonjour,
quant à output:
me donne
Vous allez créer un compte :
Entrez le nom du titulaire :
x
Entrez le prenom titulaire :
y
Entrez l'adresse du titulaire :
z
solde après un an : 2524.0
mais dans la classe CompteEpargne2
si je corrige au lieu de:
public double tauxInteret=3/100;
si j'écris ainsi
public double tauxInteret=0.03;
mon résultat est bonne:
2599.7200000000003
veuillez m'aider svp
normalement après avoir calculé je dois avoir solde après avoir un an: 2599.72
mais pourquoi j'ai 2524.0 ?
veuillez m'aidez svp
public class CompteBancaire
{
public String nom, prenom, adresse,tel;
public CompteBancaire()
{
System.out.println("Vous allez créer un compte :");
System.out.println("Entrez le nom du titulaire :");
this.nom=Lire.chaine();
System.out.println("\nEntrez le prenom titulaire :");
this.prenom=Lire.chaine();
System.out.println("\nEntrez l'adresse du titulaire :");
this .adresse=Lire.chaine();
}
public void afficherAdresse()
{
System.out.println("\nAdresse du compte de " + this.nom + " = " + this.adresse );
}
}
public class CompteEpargne2 extends CompteBancaire
{
public final double soldeMinimal=1;
public double tauxInteret=3/100;
public double montantApresInteret(double montantInitial)
{
return montantInitial*(1+tauxInteret);
}
}
public class TesterHeritage2
{
public static void main(String[] args)
{
CompteEpargne2 c2=new CompteEpargne2();
double sommeVersées=2524;
System.out.println("\nSolde après un an : "+c2.montantApresInteret(sommeVersées));
}
}
quant à output:
me donne
Vous allez créer un compte :
Entrez le nom du titulaire :
x
Entrez le prenom titulaire :
y
Entrez l'adresse du titulaire :
z
solde après un an : 2524.0
mais dans la classe CompteEpargne2
si je corrige au lieu de:
public double tauxInteret=3/100;
si j'écris ainsi
public double tauxInteret=0.03;
mon résultat est bonne:
2599.7200000000003
veuillez m'aider svp
normalement après avoir calculé je dois avoir solde après avoir un an: 2599.72
mais pourquoi j'ai 2524.0 ?
veuillez m'aidez svp
3 réponses
-
Bonjour,
C'est parce que tu penses que 3/100 donne 0.03, or cela fait 0 puisque 3 est un entier. -
Bonjour,
dans la classe
remplacepublic double tauxInteret=3/100;
par :public double tauxInteret=(double)3/100;
Ceci t'évitera la division entière...-
Le cast en double c'est moche :-)
Il vaut mieux écrire3.0/100.0
pour indiquer explicitement que ce sont des double.- Peux-tu expliquer en quoi est-ce moche? ou bien qui à toi de voir si tu as un problème avec le "transtipage"... Sinon, pas mal ton idée sauf que je trouve pas important de transformer aussi le dénominateur en double (100.0) car la transformation du numérateur suffirait (le résultat d'une opération entre un double et un int est double).
- C'est "moche" parce que cela signifie que tu créés d'abord un int, puis tu effectues une conversion en double. Ça fait donc deux étapes. C'est plus propre de créer directement un double.
Sur le même principe, une division d'un double par un int conduit à convertir le int en double, alors qu'on pourrait directement donner le dénominateur en double et ainsi s'éviter la conversion. - Ce serait même pire. Ici, puisque les valeurs sont en dures il est possible que le résultat soit calculé directement à la compilation. Mais si c'était dans une boucle par exemple, donc à l'exécution, tu aurais à chaque fois la conversion, donc ça prendrait à chaque fois un petit peu plus de temps, certes pas beaucoup plus, mais autant faire ça proprement et éviter les conversions inutiles.
-
-
Salut, je pense que vous devez faire un cast pour la variable tauxInteret , donc vous avez deux solutions :
1 : passer par un cast : public double tauxInteret=(double) 3/100;
2 : indiquer que les deux nombre sont double, ce qui donne : public double tauxInteret=3.0/100.0;
bonne chance..