Rechercher : dans
Par :

Printf-scanf grand nombre C++

Dernière réponse le 17 jan 2008 à 11:34:24 huacool, le 15 jan 2008 à 15:11:36 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « printf scanf grand nombre C++ » dans :
Les bases pour référencer votre site professionnel facilement VoirLes bases pour référencer son site professionnel facilement Avoir un site Internet c'est bien mais faire en sorte qu'il attire un grand nombre de visiteurs c'est indispensable ! En effet, le Web abrite une quantité colossale de contenus et sortir...
Numériser ses VHS VoirVous avez un grand nombre de vidéos sous forme de cassettes vidéo (au format VHS), il est possible de les numériser afin d'éviter de perdre leur contenu, car ce genre de support a tendance à s'altérer avec les années. Numériser vos bandes VHS sans...
Langage C - Notion de préprocesseur VoirDéfinition du préprocesseur Dans les chapitres précédents, un programme simple vous a été présenté, il s'agit du programme suivant : int main(void) { printf("Ceci est votre premier programme"); } Dans ce programme la fonction principale...
Caractéristiques du langage C VoirLe fichier source Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c. Note d'un visiteur (J.Grondin) : L'extension est en minuscules. Le .C (majuscule) est interprété par...
Windows 7 - Notepad et Wordpad VoirTout faire (ou presque) avec Windows 7 Si Windows 7 possède autant de fonctions, c’est qu’il intègre un grand nombre de logiciels, permettant ainsi de multiples usages pour l’ordinateur. Qu’il s’agisse de vous permettre de rédiger des documents,...

1

SebManfred, le 15 jan 2008 à 15:15:46

Salut,
remplace tes float en double
à+

Répondre à SebManfred

2

Char Snipeur, le 15 jan 2008 à 15:40:29

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.
Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

3

dubcek, le 15 jan 2008 à 16:05:28

Ou même long double jj;

Répondre à dubcek

4

belhauss, le 15 jan 2008 à 20:25:15

#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");
}

Répondre à belhauss

5

mamiemando, le 15 jan 2008 à 23:25:02

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

Répondre à mamiemando

6

Char Snipeur, le 16 jan 2008 à 08:49:25

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;

Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

8

mamiemando, le 16 jan 2008 à 22:53:41

?

Non

Répondre à mamiemando

13

Char Snipeur, le 17 jan 2008 à 10:47:19

Si, mais il est vrai qu'il faut include <iomanip> aussi.
Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

14

 mamiemando, le 17 jan 2008 à 11:34:24

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...

Répondre à mamiemando

7

huacool, le 16 jan 2008 à 20:11:36

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!

Répondre à huacool

9

mamiemando, le 16 jan 2008 à 22:54:25

Peux tu nous donner ton code actuel et les valeurs que tu saisis à l'exécution ?

Répondre à mamiemando

10

huacool, le 17 jan 2008 à 00:53:33

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 !

Répondre à huacool

11

mamiemando, le 17 jan 2008 à 10:27:28

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.

Répondre à mamiemando

12

Char Snipeur, le 17 jan 2008 à 10:44:55

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'

Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur
Collection CommentÇaMarche.net