Printf-scanf grand nombre C++

Fermé
huacool - 15 janv. 2008 à 15:11
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 - 17 janv. 2008 à 11:34
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.
A voir également:

10 réponses

SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
15 janv. 2008 à 15:15
salut,
remplace tes float en double
à+
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
15 janv. 2008 à 15:40
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.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
15 janv. 2008 à 16:05
ou même long double jj;
0
belhauss Messages postés 69 Date d'inscription dimanche 24 décembre 2006 Statut Membre Dernière intervention 9 février 2012 3
15 janv. 2008 à 20:25
#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");
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799
15 janv. 2008 à 23:25
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
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
16 janv. 2008 à 08:49
Olalal ! Tu as oublié un std:: au deuxième cout !!!
Honte sur toi.
D'après la doc, tu peux aussi utiliser des manipulateur pour la precision :
std::cout<<std::setprecision(3)<<x<<std::setprecision(15)<<x<<std::endl;
0
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799 > Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
16 janv. 2008 à 22:53
?

Non
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298 > Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
17 janv. 2008 à 10:47
Si, mais il est vrai qu'il faut include <iomanip> aussi.
0
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799 > Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
17 janv. 2008 à 11:34
Ah oui, effectivement au temps pour moi. Par contre je n'ai jamais inclu <iomanip> et ça marche très bien chez moi. Enfin bref...
0
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!
0
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799
16 janv. 2008 à 22:54
Peux tu nous donner ton code actuel et les valeurs que tu saisis à l'exécution ?
0
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 !
0
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799
17 janv. 2008 à 10:27
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.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
17 janv. 2008 à 10:44
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'
0