222 votes

Comment supprimer la notation scientifique en Python ?

Voici mon code :

x = 1.0
y = 100000.0    
print x/y

Mon quotient s'affiche comme 1.00000e-05

Existe-t-il un moyen de supprimer la notation scientifique et de l'afficher sous la forme suivante 0.00001 ?

Merci d'avance.
C'est un peu ridicule de demander ça mais je n'ai pas encore trouvé de un moyen de le faire. Je vais utiliser le résultat comme une chaîne de caractères.

29 votes

Il est décevant de constater qu'aucune des réponses données ici ne répond à la question. Ce serait bien s'il y avait un moyen d'empêcher python(3) d'utiliser la notation scientifique sauf si cela est spécifié explicitement. Toutes les réponses demandent à l'utilisateur de supprimer explicitement la notation scientifique, ce qui n'est pas la même chose que de supprimer l'utilisation implicite de la notation scientifique dans python.

5 votes

Oui, comme R le fait avec options(scipen = 999)

0 votes

@BLUC le numpy Le module offre np.format_float_positional() et cela fonctionne bien.

157voto

iamaziz Points 49

Utilisation de la nouvelle version ''.format (n'oubliez pas non plus de spécifier le nombre de chiffres après le numéro d'identification de l'entreprise). . que vous souhaitez afficher, cela dépend de la taille du nombre flottant). Voir cet exemple :

>>> a = -7.1855143557448603e-17
>>> '{:f}'.format(a)
'-0.000000'

comme indiqué ci-dessus, la valeur par défaut est de 6 chiffres ! Cela n'est pas utile pour notre exemple, nous pourrions donc utiliser quelque chose comme ceci :

>>> '{:.20f}'.format(a)
'-0.00000000000000007186'

Mise à jour

À partir de Python 3.6, cela peut être simplifié grâce à la nouvelle fonction littéral de chaîne formatée comme suit :

>>> f'{a:.20f}'
'-0.00000000000000007186'

2 votes

Mais comment le faire tout en spécifiant les chiffres significatifs ?

2 votes

Je suppose qu'en utilisant une variable, on lui donne le nombre de chiffres souhaité et on l'utilise à la place du nombre littéral, par exemple. f"{a:.{precision}f}"

4 votes

Comment êtes-vous censé savoir quelle valeur utiliser pour precision ?

79voto

SilentGhost Points 79627
'%f' % (x/y)

mais vous devez gérer vous-même la précision, par exemple,

'%f' % (1/10**8)

n'affichera que des zéros.
les détails sont dans les docs

Ou pour Python 3 l'ancien formatage équivalent ou le formatage de style plus récent

10 votes

Je suggère de clarifier votre déclaration en disant, "vous gérez la afficher de précision vous-même". La précision réelle (interne à Python) n'est pas modifiée, comme c'est souvent le cas dans d'autres langages.

52voto

nmichaels Points 21955

Avec les versions plus récentes de Python (2.6 et plus), vous pouvez utiliser ''.format() pour accomplir ce que @SilentGhost a suggéré :

'{0:f}'.format(x/y)

2 votes

Est-ce vraiment ce que tu veux ? Je ne le veux pas : >>> print('{:f}'.format(0.000000123)) 0.000000

1 votes

@duality vous pourriez avoir besoin de spécifier la précision. '{0:.10f}'

0 votes

Cela ne fonctionne pas non plus si vous essayez d'imprimer une liste de valeurs. Nous avons besoin d'un paramètre de format global.

51voto

Josh Janjua Points 251

Une autre option, si vous utilisez pandas et que vous souhaitez supprimer la notation scientifique pour tous les flottants, consiste à ajuster les options de pandas.

import pandas as pd
pd.options.display.float_format = '{:.2f}'.format

0 votes

J'ai trouvé cette réponse utile surtout en la combinant avec l'autre réponse ici pour une approbation supplémentaire : import pandas as pd import numpy as np pd.options.display.float_format = '{:.2f}'.format np.set_printoptions(suppress=True)

48voto

Denis Golomazov Points 1211

La plupart des réponses ci-dessus vous obligent à spécifier la précision. Mais que faire si vous voulez afficher des flottants comme ceci, sans zéros inutiles :

1
0.1
0.01
0.001
0.0001
0.00001
0.000001
0.000000000001

numpy a une réponse : np.format_float_positional

import numpy as np

def format_float(num):
    return np.format_float_positional(num, trim='-')

1 votes

C'est la meilleure réponse si vous voulez un nombre général de décimales (c'est-à-dire qu'il n'est pas nécessaire de spécifier les décimales auparavant).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X