Maison >développement back-end >C++ >Pourquoi `std::cout.precision()` n'affiche-t-il pas les zéros de fin dans les nombres à virgule flottante en C ?
Utilisation correcte de std::cout.precision() pour afficher les zéros de fin
Lorsque vous travaillez avec des nombres à virgule flottante en C, le La méthode std::cout.precision() est cruciale pour contrôler le nombre de décimales affichées. Cependant, dans certains cas, les utilisateurs rencontrent des résultats inattendus, comme l'absence de zéros à droite.
Considérez le code suivant :
int main() { int a = 5; int b = 10; std::cout.precision(4); std::cout << (float)a / (float)b << "\n"; return 0; }
Ce code tente d'imprimer le résultat de la division de deux entiers. (5 et 10) avec une précision de 4 décimales. Cependant, le résultat est "0,5" au lieu du "0,5000" attendu.
La raison de ce comportement réside dans le fait que les nombres « a » et « b » sont initialement stockés sous forme d'entiers. Lorsque nous effectuons la division, le résultat est également un entier par défaut. Pour afficher correctement les nombres à virgule flottante, nous devons les convertir explicitement en flottants, comme le montre la ligne :
std::cout << (float)a / (float)b << "\n";
Cependant, même après la conversion en flottants, l'absence de zéros à droite persiste. C'est là que le manipulateur std::fixed entre en jeu. Pour garantir que les zéros à droite sont affichés, nous devons passer le manipulateur std::fixed à std::cout. Ce manipulateur arrondit la valeur à virgule flottante et l'affiche en notation à virgule fixe.
Le code corrigé est :
int main() { int a = 5; int b = 10; std::cout << std::fixed; std::cout.precision(4); std::cout << (float)a / (float)b << "\n"; return 0; }
Avec l'inclusion de std::fixed, la sortie est désormais correctement affiche "0,5000", en respectant la précision spécifiée de 4 décimales.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!