c++ cout << [double] pas l'impression de décimales
J'ai un simple programme en C++ que je pensais vouloir imprimer un double de la valeur définie dans f et g comme le double ... mais le C++ est l'impression qui en fait des entiers. J'ai vérifié la précision par défaut de cout, et quand je le lance la sortie indique la précision par défaut devrait être de 6, donc je suis confus quant à pourquoi le double n'est pas l'impression correctement.
#include <iostream>
#include <stdio.h>
int main() {
double f = 735416.416898;
double g = f + 0.3;
std::cout << "default precision is " << std::cout.precision() << std::endl;
std::cout << "[c++] f = " << f << std::endl;
std::cout << "[c++] g = " << g << std::endl;
printf("[c] f = %f\n", f);
printf("[c] g = %f\n", g);
f = 735416.516898;
g = f + 0.3;
std::cout << "[c++] f = " << f << std::endl;
std::cout << "[c++] g = " << g << std::endl;
printf("[c] f = %f\n", f);
printf("[c] g = %f\n", g);
return 0;
}
La sortie que je vois est:
kiran@kiran-VirtualBox:~/test$ g++ -o test test.cpp
kiran@kiran-VirtualBox:~/test$ ./test
[c++] f = 735416
[c++] g = 735417
[c] f = 735416.416898
[c] g = 735416.716898
[c++] f = 735417
[c++] g = 735417
[c] f = 735416.516898
[c] g = 735416.816898
Parce que la précision par défaut est de 6, ne pas le cout aussi être montrant les 6 chiffres après la virgule?
Si je ne
std::cout << std::fixed << f
elle s'imprime correctement (w/toutes les décimales).
Demandais juste si quelqu'un peut expliquer ce comportement pour moi? Est-il prévu? Suis-je censé utiliser std::fixe de la force de l'impression de doubles correctement?
setprecision
?Voir stackoverflow.com/questions/554063/...
Il montre seulement 6 chiffres de précision, et vos nombres de 6 chiffres avant la virgule, de sorte que le dixième place faut de la précision de 7 à afficher.
OriginalL'auteur Kiran K. | 2013-11-22
Vous devez vous connecter pour publier un commentaire.
Ceci se produit en raison de la distinction entre la valeur par défaut de la notation et de l'fixe notation.
Selon la documentation,
Le stream utilise la virgule flottante par défaut jusqu'à ce que la notation (ou si) vous le passer en fixe ou en notation scientifique. Depuis votre numéro à six chiffres avant la virgule, et la précision par défaut est également fixé à six, les nombres à virgule flottante ressemblent à des nombres entiers.
OriginalL'auteur dasblinkenlight
Il y a trois virgule flottante notations:
std::fixed
pour la notation à virgule fixe.std::scientifique
pour la notation scientifique.La valeur par défaut de la notation utilise juste la valeur de précision de compter tous les chiffres du numéro de série, et pas seulement la partie décimale. Si vous utilisez un numéro court (comme 3.1415) vous pouvez voir que le nombre est affiché correctement.
Il est également intéressant de savoir que les cplusplus.com la documentation cite, que:
P. S.: pour le C++11, il ya de nouvelles notations: hexfloat pour hexadécimal et defaultfloat pour le soi-disant (aucun) avant.
OriginalL'auteur talles