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.

6voto

qwerty_url Points 99

Vous pouvez utiliser la fonction intégrée format fonction.

>>> a = -3.42142141234123e-15
>>> format(a, 'f')
'-0.000000'
>>> format(a, '.50f') # Or you can specify precision
'-0.00000000000000342142141234122994048466990874926279'

5voto

Cela fonctionnera pour n'importe quel exposant :

def getExpandedScientificNotation(flt):
    str_vals = str(flt).split('e')
    coef = float(str_vals[0])
    exp = int(str_vals[1])
    return_val = ''
    if int(exp) > 0:
        return_val += str(coef).replace('.', '')
        return_val += ''.join(['0' for _ in range(0, abs(exp - len(str(coef).split('.')[1])))])
    elif int(exp) < 0:
        return_val += '0.'
        return_val += ''.join(['0' for _ in range(0, abs(exp) - 1)])
        return_val += str(coef).replace('.', '')
    return return_val

4voto

Finn42 Points 39

Il s'agit d'utiliser Réponse de Captain Cucumber mais avec deux ajouts.

1) permettre à la fonction d'obtenir des nombres en notation non scientifique et de les renvoyer tels quels (ainsi, vous pouvez envoyer un grand nombre de données indiquant que certains des nombres sont 0.00003123 ou 3.123e-05 et faire en sorte que la fonction fonctionne.

2) ajout d'un support pour les nombres négatifs. (dans la fonction originale, un nombre négatif se terminait comme 0.0000-108904 de -1.08904e-05)

def getExpandedScientificNotation(flt):
    was_neg = False
    if not ("e" in flt):
        return flt
    if flt.startswith('-'):
        flt = flt[1:]
        was_neg = True 
    str_vals = str(flt).split('e')
    coef = float(str_vals[0])
    exp = int(str_vals[1])
    return_val = ''
    if int(exp) > 0:
        return_val += str(coef).replace('.', '')
        return_val += ''.join(['0' for _ in range(0, abs(exp - len(str(coef).split('.')[1])))])
    elif int(exp) < 0:
        return_val += '0.'
        return_val += ''.join(['0' for _ in range(0, abs(exp) - 1)])
        return_val += str(coef).replace('.', '')
    if was_neg:
        return_val='-'+return_val
    return return_val

2voto

Dana Points 9876

En plus de la réponse de SG, vous pouvez également utiliser le module Decimal :

 from decimal import Decimal
 x = str(Decimal(1) / Decimal(10000))

 # x is a string '0.0001'

17 votes

Il passe à la notation scientifique pour les valeurs inférieures à 1e-6

2voto

U-571 Points 459

S'il s'agit d'un string puis utiliser la fonction intégrée float pour faire la conversion par exemple : print( "%.5f" % float("1.43572e-03")) réponse : 0.00143572

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