Afficher des float sous un format specifique
Résolu/Fermé
A voir également:
- Afficher un float en c
- Afficher mot de passe wifi android - Guide
- Afficher appdata - Guide
- Afficher taille dossier windows - Guide
- Afficher google en page d'accueil - Guide
- Windows 11 afficher d'autres options - Guide
3 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
28 nov. 2016 à 20:32
28 nov. 2016 à 20:32
Bonjour,
Ta fonction displayVect fait tout ce qu'il faut pour afficher correctement un nombre avec 3 décimales, puis le re-transforme en flottant perdant ainsi tout formattage!
remplace les float par std::string dans cette fonction pour retourner une chaîne formattée
Ta fonction displayVect fait tout ce qu'il faut pour afficher correctement un nombre avec 3 décimales, puis le re-transforme en flottant perdant ainsi tout formattage!
remplace les float par std::string dans cette fonction pour retourner une chaîne formattée
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
28 nov. 2016 à 22:18
28 nov. 2016 à 22:18
Pour afficher avec un arrondi à 3 chiffres après la virgule, ta fonction le fait.
Pour convertir exactement un float ou un double de manière à ce qu'il ait 3 chiffres après la virgule, ça n'existe pas car cela n'a pas de sens. Les flottants sont des approximations des nombres décimaux, ils sont stockés en base 2 et n'auront pas toujours un équivalent en base 10.
Par exemple : 0.2 à une décimale en base 10 mais est approximé 0.20000000298 en float et 0.200000000000000011 en double.
Le code que tu as trouvé cherche une conversion avec N chiffres significatifs, il obtient une approximation qui nécessitera un traitement d'affichage si le résultat a des décimales.
Pour convertir exactement un float ou un double de manière à ce qu'il ait 3 chiffres après la virgule, ça n'existe pas car cela n'a pas de sens. Les flottants sont des approximations des nombres décimaux, ils sont stockés en base 2 et n'auront pas toujours un équivalent en base 10.
Par exemple : 0.2 à une décimale en base 10 mais est approximé 0.20000000298 en float et 0.200000000000000011 en double.
Le code que tu as trouvé cherche une conversion avec N chiffres significatifs, il obtient une approximation qui nécessitera un traitement d'affichage si le résultat a des décimales.
Mince...
Il semblerait je fasse fausse route alors ?
Si il ne s'agit pas d'arrondir mes 3 décimales alors je ne vois pas bien comment obtenir autrement les résultats attendus...
Je vois cela en détails demain.
Je reste en non résolu pour le moment car je risque très certainement d'avoir de nouveaux besoins d'aide.
Merci d'avoir pris le temps de me répondre dalfab.
Bonne soirée.
Il semblerait je fasse fausse route alors ?
Si il ne s'agit pas d'arrondir mes 3 décimales alors je ne vois pas bien comment obtenir autrement les résultats attendus...
Je vois cela en détails demain.
Je reste en non résolu pour le moment car je risque très certainement d'avoir de nouveaux besoins d'aide.
Merci d'avoir pris le temps de me répondre dalfab.
Bonne soirée.
Utilisateur anonyme
29 nov. 2016 à 17:18
29 nov. 2016 à 17:18
Bonjour,
je suis de retour avec toujours la même interrogation ...
ce que je vise =>
ce que j'ai actuellement =>
J'ai corriger les quelques erreurs de calcule qui rester.
je suis toujours certain que je doit arrondir mes résultats au niveau des décimales pour obtenir les chiffre attendue. bien que Dalfab m'explique que c'est pas logique ....
je ne vois pas d'autre issus .
j'aimerais avoir vos avis et ou vos remarques.
merci de votre aide / suivis.
je suis de retour avec toujours la même interrogation ...
ce que je vise =>
ce que j'ai actuellement =>
J'ai corriger les quelques erreurs de calcule qui rester.
je suis toujours certain que je doit arrondir mes résultats au niveau des décimales pour obtenir les chiffre attendue. bien que Dalfab m'explique que c'est pas logique ....
je ne vois pas d'autre issus .
j'aimerais avoir vos avis et ou vos remarques.
merci de votre aide / suivis.
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 30/11/2016 à 19:03
Modifié par [Dal] le 30/11/2016 à 19:03
Salut,
Dalfab a dit : "Le code que tu as trouvé cherche une conversion avec N chiffres significatifs, il obtient une approximation qui nécessitera un traitement d'affichage si le résultat a des décimales.", pas que ce que tu veux faire n'est pas logique.
En ce qui me concerne, j'avoue ne pas comprendre quelles sont tes données de départ, sous quelle forme elles existent dans ton programme en C, et ce que tu veux en faire exactement.
Je ne crois pas que tu aies beaucoup plus d'avis ou de remarques sans ce genre de précisions (avec des exemples significatifs)... là pour moi, c'est le flou total
Dal
Dalfab a dit : "Le code que tu as trouvé cherche une conversion avec N chiffres significatifs, il obtient une approximation qui nécessitera un traitement d'affichage si le résultat a des décimales.", pas que ce que tu veux faire n'est pas logique.
En ce qui me concerne, j'avoue ne pas comprendre quelles sont tes données de départ, sous quelle forme elles existent dans ton programme en C, et ce que tu veux en faire exactement.
Je ne crois pas que tu aies beaucoup plus d'avis ou de remarques sans ce genre de précisions (avec des exemples significatifs)... là pour moi, c'est le flou total
Dal
effectivement vue de l’extérieur ça doit pas être top a comprendre, c'est très simple heureusement : je reçoit en paramètre deux Int ici _A et _B obligatoirement > a 50.
et j'applique un calcule pour obtenir des statistiques.
le calcule c'est celui la : ((a - x) (b - y)) / ((5a - 150) (5b - 150))
voila un peu de code pour y voir plus clair : (_A et _B sont stocker dans ma class Cal)
suite a cela je ne fait que afficher les valeur contenue dans mon vector _Tab une a une pour formé le tableau que vous retrouvé plus haut dans la conversation.
mais même une fois formaté pour afficher 3 décimales je me retrouve avec un décalage de plus en plus grand qui comme vous le voyez fausse mes résultat.
voila tout ...
besoin de plus d'info ou une solution, je suis a votre écoute.
merci.
et j'applique un calcule pour obtenir des statistiques.
le calcule c'est celui la : ((a - x) (b - y)) / ((5a - 150) (5b - 150))
voila un peu de code pour y voir plus clair : (_A et _B sont stocker dans ma class Cal)
int Cal::CalcTab() { int X; for (unsigned int Y = 10; Y < 60; Y++) { X = 10; for (int i = 0; i < 5; i++) { this->_Tab.push_back(Stati(X, Y)); X += 10; } this->_Tab.push_back(CalcTotalY()); Y += 10; } CalcTotalX(); return (DisplayTab()); } float Cal::Stati(int X, int Y) { float Sup = 0; float Inf = 0; Sup = (this->_A - X) * (this->_B - Y); Inf = ((5 * this->_A) - 150) * ((5 * this->_B) - 150); return (Sup / Inf); }
suite a cela je ne fait que afficher les valeur contenue dans mon vector _Tab une a une pour formé le tableau que vous retrouvé plus haut dans la conversation.
mais même une fois formaté pour afficher 3 décimales je me retrouve avec un décalage de plus en plus grand qui comme vous le voyez fausse mes résultat.
voila tout ...
besoin de plus d'info ou une solution, je suis a votre écoute.
merci.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
>
Utilisateur anonyme
30 nov. 2016 à 22:26
30 nov. 2016 à 22:26
ligne 5 : y++
ligne 14 : y+=10
donc y augmente de 11 à chaque itération
ligne 14 : y+=10
donc y augmente de 11 à chaque itération
28 nov. 2016 à 21:47
Merci Dalfab, voila un problème en moins dans ma soirée.
Il me reste donc a trouvé comment arrondir ses 3 derniers chiffres après la virgules ...
j'ai trouvé une discutions sur ce forum qui répond a mon problème :
(fonction codé par farscape)
mais je comprend pas tout ...
il n'existe donc pas de fonction intégrer a la lib <Iomanip> (ou une autres) pour formater mon arrondie ?
merci encore !