darmoor
Messages postés38Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention 2 novembre 2005
-
8 juin 2005 à 20:49
darmoor
Messages postés38Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention 2 novembre 2005
-
8 juin 2005 à 23:05
Salut!
En entrée, j'ai une valeur de type double.
et en sortie je doit avoir la même valeur mais arrondie au centième inferieur.
Ca marche bien pratiquement avec toute les valeurs sauf
certaines, j'ai trouvé dans le cas ou je tape 12.12 et il me sort 12.11
alors qu'il devrait sortir 12.12
la source:
#include
using namespace std;
int main(void)
{
double valeur, valeur_change,valeur_final;
cin >> valeur; //cas de 12.12 avec des essais
valeur_change = 100*(valeur - (int)valeur); // donc on obtient 0,12*100 soit 12
valeur_final = (int)valeur_change; // et la on a la
valeur entiere de 12 qui devrai etre 12 mais dans ce cas elle retourne
11....
valeur_final /= 100; // apres je divise pas 100
valeur_final += (int)valeur; //puis je l'ajoute a la valeur entier de 12.12 dans notre cas
cout << valeur_final; // et j'affiche.
system("PAUSE");
return 0;
}
donc l'erreur est donc avec valeur_final = (int)valeur_change;
or j'ai testé avec 14.14 et plein d'autre valeur surtout dans le cas de plus de 2 chiffres après la virgule et ca marchait
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 8 juin 2005 à 21:38
Parce que les float ne sont pas codés de manière exacte, en fait en
machine tu as 12.11999999, mais quand tu l'affiche c'est arrondi donc
ca donne 12.12
Si c'est l'utilisateur qui saisit le nombre, le plus simple est de
saisir une chaine ("12.12"), et la ca sera plus facile à manipuler