Más decimales necesarios en Python

Estoy escribiendo un código de Python, que se debe asignar a muchos decimales, alrededor de 14 o 15.

Espero resultados que aumenten suavemente, por ejemplo:

0.123456789101997 0.123456789101998 0.123456789101999 0.123456789102000 0.123456789102001 

Pero parece que solo estoy obteniendo números (cuando los imprimo) con 12 decimales, por lo que mis números en realidad están saltando en pasos:

 0.123456789101 0.123456789101 0.123456789101 0.123456789102 0.123456789102 

Al principio, asumí que el número estaba en una lista con más lugares decimales detrás de las escenas, pero solo se imprimió a 12, pero cuando imprimo los resultados, parecen trazarse en pasos también, en lugar de sin problemas.

Estaría muy agradecido si alguien me indicara la dirección correcta para solucionar este problema, gracias.

¿Qué hay de probar el módulo decimal?

 In [2]: import decimal In [3]: d = decimal.Decimal('0.123456789101997') In [4]: print d 0.123456789101997 

Use repr() , print usa str() que reduce el número de dígitos decimales a 12 para que la salida sea fácil de usar.

 In [17]: a=0.123456789101997 In [18]: str(a) Out[18]: '0.123456789102' In [19]: repr(a) Out[19]: '0.123456789101997' 

o formato de cadena:

 In [21]: "{0:.15f}".format(a) Out[21]: '0.123456789101997' 

Como se sugirió en las respuestas anteriores, puede usar números decimales a través del módulo decimal , o alternativamente puede especificar 15 lugares decimales al imprimir valores de punto flotante, para anular el valor predeterminado de 12 lugares.

En muchas implementaciones de Python, los números de punto flotante ordinarios son compatibles con IEEE 754 ( 1 , 2 ), los números de precisión doble “binary64”, por lo que tienen efectivamente 53 bits en sus mantissas. Como 53*math.log(2)/math.log(10) es de aproximadamente 15.95, los números binarios 64 admiten más de 15 dígitos decimales de precisión pero no son exactamente 16.

Aquí hay un ejemplo que puedes probar, que se muestra con su salida:

 u=1e-15 v=0.123456789101997 for k in range(13):print '{:20.15f}'.format(v+k*u) 0.123456789101997 0.123456789101998 0.123456789101999 0.123456789102000 0.123456789102001 0.123456789102002 0.123456789102003 0.123456789102004 0.123456789102005 0.123456789102006 0.123456789102007 0.123456789102008 0.123456789102009 

Puedes usar Decimal para una mejor precisión.

Puedes elegir usar el módulo decimal para este propósito.

Necesitas importar el módulo.

 >>> from decimal import * 

Luego, debe especificar el número de puntos decimales que necesita llamando a la función getcontext (). El siguiente código pide 25 puntos decimales.

 >>> getcontext().prec = 25 

Entonces, necesitas especificar tu aritmética. El siguiente código determina el valor de pi hasta 25 puntos decimales.

 >>> Decimal(22) / Decimal(7) 

La salida es

 >>> Decimal('3.142857142857142857142857')