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
The real danger is not that computers will begin to think like men, but that men will begin to think like computers.
-- Harris, Sidney J. -
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
The real danger is not that computers will begin to think like men, but that men will begin to think like computers.
-- Harris, Sidney J. -
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.The real danger is not that computers will begin to think like men, but that men will begin to think like computers.
-- Harris, Sidney J. -
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
- 165.6K Toutes les catégories
- 66 Collège/Lycée
- 22.2K Algèbre
- 37.7K Analyse
- 6.3K Arithmétique
- 61 Catégories et structures
- 1.1K Combinatoire et Graphes
- 13 Sciences des données
- 5.1K Concours et Examens
- 26 CultureMath
- 51 Enseignement à distance
- 2.9K Fondements et Logique
- 10.8K Géométrie
- 86 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 79 Informatique théorique
- 3.9K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 30 Mathématiques et finance
- 342 Mathématiques et Physique
- 5K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10.1K Probabilités, théorie de la mesure
- 806 Shtam
- 4.2K Statistiques
- 3.8K Topologie
- 1.4K Vie du Forum et de ses membres