2010-03-18 17 views
3

Je veux imprimer des nombres dans un fichier en utilisant la stl avec le nombre de décimales, plutôt que la précision globale.Comment puis-je changer la précision de l'impression avec le fichier stl?

Donc, si je fais ceci:

int precision = 16; 
std::vector<double> thePoint(3); 
thePoint[0] = 86.3671436; 
thePoint[1] = -334.8866574; 
thePoint[2] = 24.2814; 
ofstream file1(tempFileName, ios::trunc); 
file1 << std::setprecision(precision) 
    << thePoint[0] << "\\" 
    << thePoint[1] << "\\" 
    << thePoint[2] << "\\"; 

Je vais obtenir des chiffres comme ceci:

86.36714359999999\-334.8866574\24.28140258789063 

Ce que je veux est ceci:

86.37\-334.89\24.28 

En d'autres termes, tronquer à deux décimales. Si je définis la précision à 4, alors je vais obtenir

86.37\-334.9\24.28 

par exemple, le deuxième nombre est incorrectement tronqué. Je ne veux pas avoir à manipuler chaque nombre explicitement pour obtenir la troncature, d'autant plus que j'ai l'impression de recevoir de temps en temps des répétitions ou 0000000001 ou quelque chose comme ça.

Je suis sûr qu'il y a quelque chose d'évident, comme l'utilisation du printf (% 2f) ou quelque chose comme ça, mais je ne sais pas comment mélanger cela avec la stl < < et ofstream.

Répondre

7

Utilisez std :: fixed, cela devrait fonctionner pour vous.

file1 << std::fixed << std::setprecision(precision) 
    << thePoint[0] << "\\" 
    << thePoint[1] << "\\" 
    << thePoint[2] << "\\"; 
+0

Voilà, merci! – mmr

2

Essayez

file1 << std::setiosflags(ios::fixed) << std::setprecision(precision) 

qui définit le format en virgule fixe au lieu de virgule flottante.

(Soit dit en passant, ce n'est pas STL. Il est iostream.)

... Oh! Je pense que Kumar m'a amélioré avec std::fixed.

+0

Comment est-ce que ce n'est pas STL? iostream est l'une des bibliothèques de modèles standard .... – SoapBox

+0

Juste parce que quelque chose utilise des modèles ne le rend pas STL. Suivez les liens et vous trouverez qu'ils sont radicalement différents. –