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.
Configuration: Windows XP
Firefox 2.0.0.11

10 réponses

  1. Contributeur
    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
    1. Modérateur
      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
      1. 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
        1. Modérateur
          Peux tu nous donner ton code actuel et les valeurs que tu saisis à l'exécution ?
          0
          1. 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
            1. Modérateur
              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. Contributeur
                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
              2. Contributeur
                @Char SnipeurSi, mais il est vrai qu'il faut include <iomanip> aussi.
                0
              3. Modérateur
                @Char SnipeurAh 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
            2. #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
              1. Contributeur
                ou même long double jj;
                0
                1. Contributeur
                  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
                  1. salut,
                    remplace tes float en double
                    à+
                    0