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!

Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top