Formatage des flottants en python
Bonjour,
avant de développer une fonction (sans doute pas très compliquée) je me demande s'il n'y a pas une solution plus immédiate pour en python, afficher un flottant avec un nombre de décimales fixé dans une variable ;
Quelqu’un a-t-il déjà été confronté à cette contrainte ?
Cordialement.
avant de développer une fonction (sans doute pas très compliquée) je me demande s'il n'y a pas une solution plus immédiate pour en python, afficher un flottant avec un nombre de décimales fixé dans une variable ;
Quelqu’un a-t-il déjà été confronté à cette contrainte ?
Cordialement.
Réponses
-
>>> from math import pi >>> print("%.8f"%pi) 3.14159265 >>> print("%.6f"%pi) 3.141593
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
Mon problème est que dans %.8f , le nombre de décimales (8) est fixe . Moi j'ai sa valeur dans une variable (n par exemple) mais je ne connais pas cette valeur .
Je pense qu'une fonction recevant le flottant et le nombre de décimales à afficher n'est pas très compliquée (avec floor()) par exemple . -
>>> print("{:.{prec}f}".format(pi,prec=6)) 3.141593 >>> print("{:.{prec}f}".format(pi,prec=9)) 3.141592654
Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
Je me doutais qu'il devait y avoir une solution plus immédiate . Je vais tester cela avec une variable pour la précision .
Merci nicolas.patrois pour ces réponses rapides et pertinentes . -
Je les ai trouvées en cherchant « python format float », la première manière est obsolète, pas la dernière.Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
J'ai cherché aussi avec ces mots clés mais je ne suis jamais tombé sur cette syntaxe . Le plus détaillé que j'ai trouvé est ceci où cette syntaxe n'apparait pas explicitement .
Mais elle donne exactement ce que je souhaitais .
Encore un grand merci car j'ai beaucoup cherché sans trouver .
Voila mon test :nb_dec = int(input ("Nombre de décimales : (0 pour quitter) ")) nb_f = 10.6789678967896789 while (nb_dec != 0) : print("{:.{prec}f}".format(nb_f , prec = nb_dec)) nb_dec = int(input ("Nombre de décimales : (0 pour quitter) "))
[Python en italique ne vaut rien. Il faut la bannière code pour préserver les indentations. AD] -
En fait, on peut utiliser la première syntaxe mentionnée dans ce fil (dite «classique», héritière du C) pour parvenir au résultat, et ce, de deux manières différentes :
from math import pi print("%.*f" %(8,pi)) print("%.*f" %(6, pi)) print() for precision in [8,6]: print("%%.%sf" % precision %pi)
qui affiche :3.14159265 3.141593 3.14159265 3.141593
Concernant l'autre syntaxe, elle utilise des «champs de remplacement emboîtés», c'est expliqué très laconiquement dans la doc officielle, le paragraphe commençant par "A format_spec field can also include nested replacement fields within it."
Pour alléger la syntaxe format, il est plus agréable d'utiliser des chaînes littérales formatées (Python 3.6 au moins) :from math import pi precision=6 s= f"{pi:.{precision}f}" print(s)
mais à mon goût, la syntaxe classique * est ici plus lisible.
La doc officielle actuelle ne considère pas la première syntaxe comme obsolète. Les premières versions de Python 3 ont tenté de la rendre explicitement telle mais cette mention a été retirée dans la doc des versions ultérieures de Python. Voir aussi des discussions sur stackOverflow. -
toutes ces syntaxes ne sont pas facile à trouver et peu lisibles pour les non experts . Aussi j'ai préféré les cacher dans une fonction comme :
print_float (val , precision)
Merci en tout cas pour toutes ces informations -
On peut mettre une indication de précision aussi élevée que l’on veut dans le formatage.
"'%.266f' % x sortira 266 chiffres après la virgule. Mais Python fait les calculs sur la base
des représentations internes (soit des représentations binaires des nombres) à 52 digits.
Il y a des tutoriels si on développe dans ce langage plutôt en VOEN mais aussi en VOFR . -
Pour illustrer ce que dit Romyna, avec le module standard decimal :
import decimal decimal.getcontext().prec = 100 d = decimal.Decimal(2646693125139304345)/842468587426513207 print('{:.100}'.format(d))
qui affiche :3.141592653589793238462643383279502884183062184016283770132773708960402899373640293814361991185808100
On peut faire un formatage analogue avec le module (non standard) bigfloat.
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 7 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 53 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres