Déjà rassurez vous, je ne viens pas vous demander comment afficher un nombre flottant en C.
Mon problème est le suivant: disons que je veuille afficher exactement 7 chiffres d'un nombre flottant, parties entières et décimales inclues. Je ne peux pas faire
printf("%.6lf", number);
puisque ça fonctionnera uniquement pour les nombres inférieur à 10.
Du coup j'aimerais savoir s'il ya une technique potable pour le faire. Une qui fonctionnerait pour les nombres inférieur à 10, 100, 1000, 10000...etc. La solution qui m'est venue à l'esprit pour le moment est d'utiliser la fonction modf() de math.h de la manière suivante:
Je crois qu'on est tous d'accord sur le fait que ma fonction split_fxn() est non seulement bancales, mais en plus ne résout que partiellement le problème. Alors s'il ya une meilleure technique, prière de bien vouloir la partager avec moi.
Le format peut être encodé dans une chaîne comme suit:
On peut faire log10(a)+1; pour obtenir le nombre de digits avant le point.
#include <stdio.h> int main(void) { char fmt[10] = "%7.5lf"; int n=2; // nombre de digits avant le point. sprintf(fmt, "%%%d.5lf", n+6); printf("%s\n", fmt); double a = 12.34567; printf(fmt, a);printf("\n"); }
%8.5lf 12.34567
- Edité par PierrotLeFou 26 juin 2022 à 17:35:29
Le Tout est souvent plus grand que la somme de ses parties.
@rouIoude: j'avais oublié cela ... On peut décider du nombre de digits avant ou après le point: printf("%*.*lf", 8, 5, a); Si la partie entière est trop grande, printf affiche plus grand.
Le Tout est souvent plus grand que la somme de ses parties.
Et si au lieu de fixer le nombre de chiffres à afficher, ont laissait plutôt le programme s'en charger. Dans ce cas, il faudrait :
stocker tous les nombres à afficher dans un tableau de double
trouver le nombre ayant la plus grande partie entière (greatest par exemple)
et enfin, toujours afficher au plus N + 3 chiffres (N étant le nombre de chiffres que contient la partie entière de greatest)
Je pense que cela résoudrait le problème que pose le fait d'avoir une partie entière trop grande.
Ainsi, pour un tableau
double table[3] = {12.34567, 8.25, 512.9648};
On aurait:
12.3456
8.25000
512.964
Quels sont vos avis ?
@rouloude: J'aime beaucoup le fait de prendre en compte les nombres négatifs. Mais dans ce cas, on devra modifier le printf pour qu'il ajoute un plus(+) devant les nombres positifs. En effet, mon but est d'afficher plusieurs nombres sous forme d'un tableau. voici le résultat que j'ai obtenu avec ma fonction split_fxn().
NB: il y a quelques tabulations derrière
Comme tu peux le voir il y a un alignement parfait des nombres et je souhaite le garder. D'où mon envie de fixer le nombre de chiffres à afficher dès le départ.
Etant donné que l'exercice lui-même n'a rien à voir avec le monde de la programmation, j'ai préféré vous épargner les détails.
Afficher un nombre de chiffres significatifs si on veut être exact n'est pas simple, il y a aussi les arrondis à prendre en compte. Si on prend l'algo de rouloude, il va faillir dans ce cas.
split_fxn(9.94,2,4); // va bien donner " 9.9"
split_fxn(9.96,2,4); // va donner "10.0" qui a 3 chiffres significatifs!
Ces cas étants rares, on peut surement accepter ce "défaut", le résoudre n'est pas si simple.
Edit : en fait il suffit de détecter qu'il y a eu dépassement et d'enlever le chiffre de trop qui est forcément un '0' dans ce cas.
J'aurais peut être dû commencer par là mais je suis étudiant en ingénierie pétrolière et dans notre domaine, les nombres les plus grands qu'on obtient sont les quantités d'hydrocarbures. Celles-ci étant toujours estimées en millions de barils, on peut donc prendre cela comme point de référence. Ainsi, on est sûr de toujours avoir au plus 9 chiffres dans la partie entière (MAX = 999,000,000).
En utilisant la méthode proposée par @rouloude, il suffirait donc d'afficher exactement 10 chiffres, parties entières et décimales inclues. Mais ça fait beaucoup de zéros pour les nombres plus petits.
# Vite fait, ça donne ça
Bien entendu cela ne résout pas le problème d'un point de vue général mais dans ce domaine précis, ça pourrait faire l'affaire.
Quels sont vos avis ?
- Edité par ChristianAlbertLamy 27 juin 2022 à 15:50:01
Ça fait de l'alignement sur la virgule (le point). avec trois chiffres derrière.
void dsp(double d)
{
printf("%15.3f\n", d);
}
Fait à peut près la même chose !
Mais oui. Que je suis parfois idiot !
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Affichage d'un nombre flottant
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
En recherche d'emploi.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent