2

Si je comprends bien la fonction SetPrecision spécifie la précision minimale, mais quand je lance le code suivant je reçois seulement 3 chiffres après la virgule:C++ précision - comportement des SetPrecision

int main() 
{ 
    double a = 123.4567890; 
    double b = 123.4000000; 
    std::cout << std::setprecision(5) << a << std::endl; // Udesireble 
    std::cout.setf(std::ios::fixed); 
    std::cout << std::setprecision(5) << a << std::endl; // Desireble 

    std::cout << std::setprecision(5) << b << std::endl; // Udesireble 
    std::cout.unsetf(std::ios::fixed); 
    std::cout << std::setprecision(5) << b << std::endl; // Desireble 
    return 0; 
} 

qui imprime:

123.46  // Udesireble 
123.45679 // Desireble 
123.40000 // Udesireble 
123.4  // Desireble 

Y a-t-il un moyen d'éviter de vérifier moi-même le nombre de chiffres après le point décimal afin de savoir si l'on veut régler ce nombre?

Répondre

1

Mon impression est que vous devrez d'abord formater en string, puis remplacer les zéros de fin par des espaces.

+0

Malheureusement, c'est la seule solution qui a fonctionné jusqu'à présent, mais je n'étais sûr que C++ pourrait avoir quelque chose de plus élégant que je ne suis pas conscient de. – SadStudent

+0

@SadStudent Votre exigence est un peu rare. L'habitude est d'avoir un nombre fixe de positions décimales (et zéro-remplissage :-() .C'est très bien que vous avez demandé –

0

Pour les flux, vous pouvez utiliser deux fonctions. setfill(char_type c), qui définissent le caractère à écrire, pour correspondre avec le nombre de caractères nécessaires (plus d'information here)

Il est la fonction setw (int), qui définissent la largeur du champ de la valeur à afficher. (Documentation here)

L'utilisation de ces fonctions, vous pouvez avoir une solution

+0

Je ne vois pas comment puis-je le résoudre en utilisant ces fonctions, car tout au plus ils peuvent m'aider à ajouter zéros par exemple à la fin que j'ai écrit je ne veux pas je veux juste jusqu'à 5 chiffres après le point – SadStudent

+0

Comme je le mentionne dans l'exemple de code, j'ai essayé cela, mais il ruine les cas où je ne veux pas de sens Zéros à la fin parce que c'est "fixe", je cherche un moyen qui ne me fait pas vérifier tous les chiffres dans chaque double que je veux mettre dans le flux – SadStudent

Questions connexes