Printf-scanf grand nombre C++
Bonjour,
Mon petit programme ne m'affiche pas la valeur que j'ai entré.
Si je lui donne 2454329.666326 , il m'affiche 2454329.750000.
Or il me faut toute les décimales pour la suite des calculs.
Voici le programme:
#include <stdio.h>
#include <iostream>
float jj;
main()
{
printf ("Entrez la date en jours juliens:\n");
scanf("%f",&jj);
printf("La date en juliens est: %14.6f\n",jj);
system("PAUSE");
}
Tout réponse est la bienvenue. Merci.
Mon petit programme ne m'affiche pas la valeur que j'ai entré.
Si je lui donne 2454329.666326 , il m'affiche 2454329.750000.
Or il me faut toute les décimales pour la suite des calculs.
Voici le programme:
#include <stdio.h>
#include <iostream>
float jj;
main()
{
printf ("Entrez la date en jours juliens:\n");
scanf("%f",&jj);
printf("La date en juliens est: %14.6f\n",jj);
system("PAUSE");
}
Tout réponse est la bienvenue. Merci.
Configuration: Windows XP Firefox 2.0.0.11
10 réponses
-
salut,
remplace tes float en double
à+ -
Salut.
en informatique, les nombre ont des précisions selon le type choisi.
Ainsi, un float semble avoir une précision de 10^-9, tandis qu'un double a une précision de 10^-15.
Autrement dit, l'ordinateur ne stocke qu'une partie d'un nombre décimal : 9 chiffres pour les float et 15 pour les doubles. Ensuite, il stock la puissance de 10 associer, mais c'est tout. -
ou même long double jj;
-
#include <stdio.h>
#include <iostream>
long double jj;
main()
{
cout<<"Entrez la date en jours juliens:"<<endl;
cin>>jj;
cout<<"La date en juliens est: <<jj<<endl;
system("PAUSE");
} -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
La version de <4> codée correctement :
#include <iostream> #include <cstdio> // pour les windowsiens int main(){ long double jj; std::cout << "Entrez la date en jours juliens:" << std::endl; std::cin >> jj; cout << "La date en juliens est:" << jj << std::endl; getchar(); // pour les windowsiens return 0; }
Note que la méthode precision peut être appliquée à std::cout en vue de changer le nombre de chiffres significatifs. Exemple :#include <iostream> #include <cstdio> // pour les windowsiens int main(){ double x = 1.23456789; std::cout.precision(2); std::cout << x << std::endl; std::cout.precision(5); std::cout << x << std::endl; getchar(); // pour les windowsiens return 0; }
Bonne chance -
Merci pour toutes ces réponses.
En utilisant "long double" ça marche parfaitement.
En revanche avec "double" ça ne marche pas.
Si je lui donne 2454329.666326 , il m'affiche 6.140953e-315 .
Or normalement les double vont de -1.7*10^-308 à 1.7*10^308.
Quelqu'un sait-il pourquoi?
A plus! -
Peux tu nous donner ton code actuel et les valeurs que tu saisis à l'exécution ?
-
Voici mon code:
#include <stdio.h>
#include <iostream>
double jj;
main()
{
printf ("Entrez la date en jours juliens:\n");
scanf("%e",&jj); // float ne prend que 6 chiffres avant et aprés la virgule; au dessus ça deconne */
printf("La date en juliens est: %e\n",jj);
system("PAUSE");
}
Si je saisis la valeur 2454329.666326 , il m'affiche 6.140953e-315 ! -
C'est une blague ? Ca sert à quoi qu'on te donne un code qui marche (cf <5>) (qui pour le coup est un code C++ et non un code C comme celui que tu proposes) ?
Comment corriger ton programme :
Ton main a pas de valeur de retour, ton system("PAUSE") est spécifique windows, et les printf sont sensés être fait avec un %lf ou un %g. -
j'utlise régulièrement le '%e' pour la sortie des double, je n'ai jamais eu de problème.
par contre, je viens de tester, pour le scanf, '%e' ne fonctionne pas en effet. utilise comme le dit mamiemando '%lf'