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?

Qu'en est 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