33 votos

¿Cómo suprimir la notación científica al imprimir valores flotantes?

Aquí está mi código:

x = 1.0
y = 100000.0    
print x/y

Mi cociente se muestra como 1.00000e-05.

¿Hay alguna forma de suprimir la notación científica y hacer que se muestre como 0.00001? Voy a utilizar el resultado como una cadena.

119voto

iamaziz Puntos 49

Usando la nueva versión ''.format (también recuerda especificar cuántos dígitos después del . deseas mostrar, esto depende de lo pequeño que sea el número flotante). Mira este ejemplo:

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

como se muestra arriba, ¡el valor predeterminado son 6 dígitos! Esto no es útil para nuestro caso de ejemplo, por lo que en su lugar podríamos usar algo como esto:

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

Actualización

A partir de Python 3.6, esto se puede simplificar con la nueva cadena de formato literal, de la siguiente manera:

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

34voto

Josh Janjua Puntos 497

Otra opción, si estás utilizando pandas y deseas suprimir la notación científica para todos los números decimales, es ajustar las opciones de pandas.

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

23voto

Denis Golomazov Puntos 1211

La mayoría de las respuestas anteriores requieren que especifiques la precisión. Pero ¿qué pasa si quieres mostrar floats de esta manera, sin ceros innecesarios:

1
0.1
0.01
0.001
0.0001
0.00001
0.000001
0.000000000001

numpy tiene una respuesta: np.format_float_positional

import numpy as np

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

23voto

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

pero necesitas gestionar la precisión por ti mismo. por ejemplo,

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

mostrará sólo ceros.
los detalles están en los documentos

O para Python 3 el formato antiguo equivalente o el formato más nuevo

21voto

nmichaels Puntos 21955

Con versiones más nuevas de Python (2.6 en adelante), puedes usar ''.format() para lograr lo que sugirió @SilentGhost:

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

Y como PEP-498 tiene más de 8 años, Python 3.6 y posteriores admiten:

f'{x/y:f}'

Alguien comentó sobre imprimir listas, así que aquí hay un bono de 1 línea:

[f'{x:f}' for x in long_list]

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X