éviter le 2e+10 en c++ [Résolu]

Messages postés
367
Date d'inscription
mardi 28 juin 2016
Dernière intervention
18 mars 2018
- - Dernière réponse : Dark_another
Messages postés
367
Date d'inscription
mardi 28 juin 2016
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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
1
Merci
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

Merci cptpingu 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
367
Date d'inscription
mardi 28 juin 2016
Dernière intervention
18 mars 2018
0
Merci
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,...) ?
Commenter la réponse de Dark_another
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
0
Merci
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;
}

Commenter la réponse de cptpingu
Messages postés
367
Date d'inscription
mardi 28 juin 2016
Dernière intervention
18 mars 2018
0
Merci
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
Commenter la réponse de Dark_another

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.