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
759 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!

source:php.cn
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