2017-09-15 2 views
2

Bien que la résolution d'un problème sur un site Web particulier, j'ai écrit ce code:de requête qui concerne le double en C++

#include <iostream> 
int main() 
{ 
    long l{12345678912345}; 
    char ch{'a'}; 
    double d{14049.30493}; 
    std::cout << l <<'\n' << ch <<'\n' << d <<'\n'; 

    return 0; 
} 

Étonnamment, la sortie du double était 14049,3, pas le nombre total. Si je mentionne explicitement

std::cout.precision(10); 

puis il imprime le nombre entier. Qu'est-ce que je fais mal?

+0

Lire http://floating-point-gui.de/ –

+0

Si 'std :: court.precision (10)' 'résout le problème, ne devrait-il pas être assez explicite quel était le problème? – George

+0

@DreamsOfElectricSheep Non, pour moi. Existe-t-il une règle générale sur la précision du double utilisé en C++? Je ne pouvais pas trouver. – anotherone

Répondre

7

La précision par défaut établie par std::basic_ios::init est 6, ce qui signifie que la sortie est limitée à 6 chiffres, sauf si plus de chiffres sont nécessaires avant la virgule.

Notez que le réglage precision prend en compte tous les chiffres (à savoir avant et après la virgule) pour déterminer le nombre de chiffres après la virgule peuvent être imprimées.

+0

Great! Je vous remercie. Aussi: Cela signifie-t-il que le nombre est également tronqué dans les calculs ultérieurs, le cas échéant, avec cette variable? – anotherone

+3

@ add349 Non, ce n'est pas le cas. C'est seulement la représentation sur la sortie standard. – Ron

-1

Vous ne faites rien de mal. En fait, vous avez déjà résolu le problème!

std::cout a tendance à arrondir les doubles pour éviter d'imprimer des nombres décimaux inhabituellement élevés. C'est pourquoi vous pouvez définir la précision pour imprimer une quantité fixe de nombres derrière le point.

+0

Toute règle où elle arrondit? Cela signifie-t-il que le nombre est également tronqué dans les calculs ultérieurs, le cas échéant, avec cette variable? – anotherone

+0

Le double n'est pas arrondi dans les calculs. Comme @RustyX a dit dans une autre réponse, '' a une précision par défaut de 6 – Baksteen