Printf-scanf grand nombre C++

huacool -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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.
Configuration: Windows XP
Firefox 2.0.0.11

10 réponses

  1. SebManfred Messages postés 484 Date d'inscription   Statut Membre Dernière intervention   128
     
    salut,
    remplace tes float en double
    à+
    0
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    ou même long double jj;
    0
  4. belhauss Messages postés 59 Date d'inscription   Statut Membre Dernière intervention   3
     
    #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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      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
      1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944 > Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention  
         
        ?

        Non
        0
      2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331 > Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Si, mais il est vrai qu'il faut include <iomanip> aussi.
        0
      3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944 > Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
  7. huacool
     
    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
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Peux tu nous donner ton code actuel et les valeurs que tu saisis à l'exécution ?
    0
  9. huacool
     
    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
  10. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  11. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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