Calcul avec 2 chiffres après la virgule

Calcul avec 2 chiffres après la virgule - C++ - Programmation

Marsh Posté le 23-06-2009 à 10:20:09    

Bonjour à tous!
 
Je suis débutant en programmation ( seulement 2h d'info tous les 15 jours programme pcsi...)  
Et j'ai un souci je vous l'explique par un exemple
 
par le programme (code blocks c++)
a=9.6587
b=54.554
 
et je voudrai c=a*b
on trouve c=536,921
 
je voudrai que le programme mette c=536,92
 
comment faire ?? (si possible avec une méthode détaillée)
 
Merci beaucoup!
 

Reply

Marsh Posté le 23-06-2009 à 10:20:09   

Reply

Marsh Posté le 23-06-2009 à 10:38:14    

ton c est une variable dans le prog ou un dekoi ke tu stok ?

Reply

Marsh Posté le 23-06-2009 à 10:46:48    

S'il n'y a pas de méthode toute faite tu peux toujours multiplier par 100 prendre la partie entière et rediviser par 100.

Reply

Marsh Posté le 23-06-2009 à 10:49:53    

J'aurais les deux
 
en fait si je voudrai que lorsque le programme effectue un calcul il prend tous les chiffres des deux variables mais que au résultat final il m'arrondi tous à 2 chiffres après la virgule
 
a=724 (variable stockée)
b=0.0472  (variable stockée)
 
après calcul ( à la calculette ) on on obtient c=34,4088
et je voudrai que le programme garde pour les prochaines opérations c=34, 41 ( arrondie à deux chiffres après la virgule)
 
c=34,41 et d=4.6954
e=(c*d)=161,57          ( à la calculette on obtient 161,568714)
 
etc
 
Merci pour votre aide
 
j'ai trouvé des truc avec cmath cfloat etc mais je sais pas comment les utilisées...


Message édité par miguydu69 le 23-06-2009 à 10:51:05
Reply

Marsh Posté le 23-06-2009 à 10:54:08    

Pour ma méthode il y a une fonction sans doute pour prendre la partie entière en arrondissant et dans ce cas ça résoud ton problème non ?

Reply

Marsh Posté le 23-06-2009 à 10:58:47    

Deamon a écrit :

Pour ma méthode il y a une fonction sans doute pour prendre la partie entière en arrondissant et dans ce cas ça résoud ton problème non ?


 
 oui sa répond à mon problème mais j'ai vraiment beaucoup de calcul...
mais bon c'est sympa d'avoir trouvé cette solution!
 
en fait j'avais trouvé sa mais je sais pas comment il faut l'utiliser...
http://www.cplusplus.com/reference/clibrary/cfloat/

Reply

Marsh Posté le 23-06-2009 à 11:08:14    

beaucoup de calculs... en 1 ligne ça tient :
nouveau= entierArrondi(ancien*100)/100
Sous réserve qu'une fonction entierArrondi existe bien.

 

Pour cfloat je connais pas assez désolé.

Message cité 1 fois
Message édité par Deamon le 23-06-2009 à 11:09:09
Reply

Marsh Posté le 23-06-2009 à 11:22:38    

Deamon a écrit :

beaucoup de calculs... en 1 ligne ça tient :
nouveau= entierArrondi(ancien*100)/100
Sous réserve qu'une fonction entierArrondi existe bien.
 
Pour cfloat je connais pas assez désolé.


 
J'ai repris ta première méthode sauf que j'arrive pas à la mettre en place ..
 
int main()
{
 
double a;
double b;
double c;
double d;
int e;
double f;
 
 
a=724;
b=0.0472;
c=a*b;
cout<<" valeur calculette =   "<<c<<endl;
 
 d=c*100;
 cout<<" c x 100 =  "<<d<<endl;
 
 e=d;
 cout<< " partie entiere de d = "<<e<<endl;
 
 f=e/100;
 cout<<" valeur arrondie=  "<<f<<endl;
 
 
    return 0;
}
 
 
 
sauf que pour f il affiche 34... alors que e=3417...
partie entiere de d= 3417
valeur arrondie = 34

(je dois tout mélangé avec int et double .... cf warning....)
 
Merci pour ton aide


Message édité par miguydu69 le 23-06-2009 à 11:51:17
Reply

Marsh Posté le 23-06-2009 à 11:35:49    

Attention si tu castes un double en int le résultat va être tronqué et non arrondi.
En tout cas bizarre pour e qui affiche 34.

Reply

Marsh Posté le 23-06-2009 à 11:40:03    

C'est un problème de formatage ou bien de calcul flottant inexact ce sujet ?

Reply

Marsh Posté le 23-06-2009 à 11:40:03   

Reply

Marsh Posté le 23-06-2009 à 11:45:57    

j'ai trouvé la solution avec une fonction mais je sais pas comment il faut la ''tapé" dans codeblocks ...
 
http://faq.vb.free.fr/index.php?question=148
 
Il s'agit de la fonction round()
 
( Cf mon post plus haut j'ai rectifié j'ai mal tapé les lettres ...)


Message édité par miguydu69 le 23-06-2009 à 11:47:21
Reply

Marsh Posté le 23-06-2009 à 11:59:20    

Tu vas rien arrondir du tout, s'il n'existe pas de représentation exacte avec 2 décimales de ton nombre, si tu l'affiches, t'auras le droit à un joli 1.333333333333333333333333333333 au lieu du 1.34 espéré (fictif).
 
Il te faut gérer et l'arrondi et l'affichage:
http://www.cplusplus.com/reference [...] precision/

Reply

Marsh Posté le 23-06-2009 à 12:44:30    

Taz a écrit :

Tu vas rien arrondir du tout, s'il n'existe pas de représentation exacte avec 2 décimales de ton nombre, si tu l'affiches, t'auras le droit à un joli 1.333333333333333333333333333333 au lieu du 1.34 espéré (fictif).
 
Il te faut gérer et l'arrondi et l'affichage:
http://www.cplusplus.com/reference [...] precision/


 
 
ok merci c'est ce que je cherchais par contre est ce que il est possible de juste de garder la valeur en stock et ne pas l'afficher ?  

Reply

Marsh Posté le 23-06-2009 à 13:19:25    

Calculer en flottant avec deux chiffres décimaux après la virgule n'a guère de sens pour le moment, les représentations internes courantes étant binaires.  Tu peux contrôler les représentations textuelles envoyées sur des flux avec std::setprecision().  


Message édité par Un Programmeur le 23-06-2009 à 14:49:29

---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 23-06-2009 à 13:39:21    

ok merci pour tout!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed