éviter le 2e+10 en c++

Résolu
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 - 22 avril 2017 à 15:40
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 - 22 avril 2017 à 22:00
Bonjour,
Je voudrai savoir si il est possible d'éviter (dans un int, double, float, ....) les chiffres comme 2e+10 et de le mettre dans la console (un peu comme la calculatrice Windows, par exemple)? Merci d'avance

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 124
Modifié le 22 avril 2017 à 17:22
Bonjour.

Il ne faut pas confondre un nombre et sa représentation. Un nombre aura toujours la même valeur ('a' == 97 == 0x61 == 9.7e+1). Ce qui va changer c'est la représentation, c'est-à-dire la manière dont tu vas afficher une valeur. Pour reprendre l'exemple du 'a', on peut le représenter sous forme de caractère, sous forme entière, sous forme scientifique, sous forme hexadécimale, etc...

Donc ici, tu veux un moyen de manipuler l'affichage de ta valeur. En C++, on fait cela en s'aidant des outils suivants:

En jouant avec ces trois notions, on a un contrôle assez précis de l'affichage final. Exemple:
#include <iostream>
#include <iomanip>

int main()
{
  // Je veux afficher 2e+10 sous la forme 20000000000
  // J'impose donc un format "entier" (std::fixed) et pas de nombre après la virgule (std::setprecision(0) + std::noshowpoint)
  std::cout << std::fixed << std::noshowpoint << std::setprecision(0) << 2e+10 << std::endl;
  return 0;                                                                                 
}



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
1
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018
22 avril 2017 à 20:40
Merci de ta réponse complète mais : lorsque je l'utilise (à la place de 2e+10, je met une variable) et que je met le numéro (genre 100000000000000) il me rajoute des numéros (ce qui donne 100000000025891) sans que je l'ai demandé. J'ai ensuite regardé ton lien ( http://en.cppreference.com/w/cpp/io/manip/fixed ) et j'ai remarqué qu'il n'y avait pas de variable, mais juste des "valeurs". Je sais que j'ai demandé une mauvaise question parce que j'ai confondu. Donc, je me pose la question :

comment éviter les résultats comme 2e+10 avec des variables (int, float,...) ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 124
22 avril 2017 à 21:21
Rien à voir... Une variable ou une valeur, c'est traité pareil ! Une variable contient une valeur. Les règles de manipulation qui sont appliquées sont strictement identiques.

Ton problème vient d'ailleurs. C'est un problème de précision. Quand on veut utiliser un nombre à virgule on utilise un double. Le float est "vieux" type trop petit, qui manque de précision. Historiquement, on l'utilisait parce que c'est plus rapide qu'un double (on parle de quelques nanosecondes), et que ça prend moins de place en mémoire. De nos jours, à moins d'être certain de ce que l'ont fait, on utilisera toujours un double plutôt qu'un float.

#include <iostream>
#include <iomanip>

int main()
{
  // Je veux afficher 2e+10 sous la forme 20000000000
  // J'impose donc un format "entier" (std::fixed) et pas de nombre après la virgule (std::setprecision(0) + std::noshowpoint)
  std::cout << std::fixed << std::noshowpoint << std::setprecision(0) << 2e+10 << std::endl;

  float sf = 100000000000000;
  std::cout << sf << std::endl; // Affichera une valeur arrondie

  double df = 100000000000000;
  std::cout << df << std::endl; // Affichera la bonne valeur

  std::cout << 100000000000000 << std::endl; // Affichera la bonne valeur, car le compilateur détecte que c'est un double

  return 0;
}

0
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018
22 avril 2017 à 22:00
D'accord !

Et maintenant j'ai compris pourquoi ça rajoute des valeurs : un double (et autre variables) sont limitées à un certains nombres et comme je les aient dépassés ça bug.
Merci de ton aide
0