2017-04-01 3 views
2

Si j'ai une double chaîne qui est égale à "123.546123" et que je la convertis en double avec atof, je n'ai que 123.546. Que puis-je faire pour résoudre ce problème?Une perte de précision

Voici mon code:

#include <iostream> 

int main(){ 

    std::string a = "123.546123"; 
    double b = atof(a.c_str()); 

    std::cout << a << std::endl; 
    std::cout << b << std::endl; 

    return EXIT_SUCCESS; 
} 
+4

Vous ne perdez pas de précision, il est écrit seulement std :: en double valeur cout par défaut à une certaine précision qui est à moins que vous attendiez. –

Répondre

8

std::cout imprime des valeurs à virgule flottante avec une précision de 6 par défaut. Pour augmenter cette précision, utilisez std::setprecision de <iomanip>, .: par exemple

std::cout << std::setprecision(9) << b << std::endl;