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 ?

Pourquoi `std::cout.precision()` n'affiche-t-il pas les zéros de fin dans les nombres à virgule flottante en C ?

Barbara Streisand
Libérer: 2024-11-10 11:41:03
original
789 Les gens l'ont consulté

Why doesn't `std::cout.precision()` display trailing zeros in floating-point numbers in 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;
}
Copier après la connexion

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";
Copier après la connexion

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;
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal