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 :
Vérifier si un nombre entier est un nombre premier en C VoirDéfinition nombre premier Algorithme 1 : les diviseurs compris entre 2 et N-1 seront testés Algorithme 2 : les diviseurs pairs ne seront pas testés, la recherche se limitant aux diviseurs impairs Algorithme 3 : les diviseurs impairs jusqu'à la...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Tableur - Les fonctions VoirLa notion de fonction Les tableurs fournissent généralement un grand nombre de fonctions intégrées permettant de réaliser des manipulations de données. Il en existe des centaines, catégorisées de la façon suivante : Les fonctions arithmétiques...
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