Réglage nombre minimum de décimales pour std :: précision ostream
Question
Y at-il un moyen de définir le nombre « minimum » de décimales qu'une sortie volonté std :: ostream?
Par exemple, dire que j'ai deux variables doubles inconnues que je veux imprimer (valeurs ajoutées ici pour titre d'illustration):
double a = 0;
double b = 0.123456789;
Je peux mettre ma précision décimale maximale de sorte que la sortie I b
exactement
std::cout << std::setprecision(9) << b << std::endl;
>>> 0.123456789
Y at-il un moyen de définir une précision « minimum » (un nombre minimum de décimales), tout en conservant la précision « maximum », de sorte que
std::cout << a << std::endl << b << std::endl;
rendements
0.0
0.123456789
pas
0
0.123456789
Merci! Phil
La réponse à cette question est « Non ». Le flux n'a qu'un seul réglage de précision, sans possibilité de différencier entre la précision maximale et minimale. Merci à tous pour vos conseils généreux!
La solution
Je ne pense pas qu'il y ait un moyen d'atteindre ce que vous demandez sans tourner le numéro dans une chaîne (avec une grande précision), et dépouillant les zéros de fin.
Il convient, parce que juste parce qu'il ya des zéros de fuite ne signifie pas qu'il n'y a pas de précision là, et l'exécution ne peut pas dire.
Par exemple, si je mesure le poids d'un objet à une échelle pas cher, il peut être de 1,0 kg.
Si je pèse avec une échelle de haute précision, il peut être 1,00000 kg. Juste parce qu'il ya des zéros, ne signifie pas que devrait être mis au rebut de précision.
Autres conseils
cout << setprecision(1) << fixed << d << endl;
Utilisé fixe après SetPrecision.
Edit: Voici ce que vous voulez. Il changerait de précision sur la base d.
cout << setprecision(d?9:1) << fixed << d << endl;