2010-07-13 42 views
10

Tengo un script que genera algunos números (específicamente los tiempos en forma de época).Imprimir números en python

Cada vez que genera un número, añado el número a una matriz (llamada VALORES) e imprimo tanto la matriz como ese número. Sin embargo, el número no contiene tantos lugares después del decimal como el número en el conjunto.

Por ejemplo, una salida de la muestra se verá así (después de 3 iteraciones):

VALUES = [733948.45278935181, 733948.45280092594, 733948.45280092594] 
Number = 733948.452801 

El tercer número de la matriz corresponde al valor en número.

¿Por qué contienen un número diferente de posiciones después del decimal?

Fuera de tema: ¿Cuáles son los números después de llamar al decimal? Pensé que había un término matemático para ellos. Simplemente no puedo recordar de qué se trata.

Nota: El código estaba en python.

Respuesta

9

Cuando Python imprime un número, a veces imprime más lugares decimales según si el método interno llama al repr o str (que ambos convierten el número en una cadena). repr devolverá más lugares decimales, mientras que str no.

print llama a str, por lo que cuando lo haga print Number, lo recortará un poco. Sin embargo, cuando convierte una lista de números en una cadena cuando hace print VALUES, la lista usará internamente repr, dándole más decimales.

En resumen, dependiendo de cómo se imprima, verá diferentes cantidades de decimales. Sin embargo, internamente, sigue siendo el mismo número.

Si desea forzar que se use un número determinado de decimales, se puede hacer esto:

print "%.3f" % 3.1415 # prints 3.142 
+0

Hmmm. Ni siquiera sabía que había un método repr(). Gracias un montón. – Paul

4

Al imprimir la lista, imprime repr (x) para cada x en la lista.

Cuando imprime el número, imprime str (x).

Por ejemplo:

>>> print 123456789.987654321 
123456789.988 

>>> print [123456789.987654321] 
[123456789.98765433] 

>>> print str(123456789.987654321) 
123456789.988 

>>> print repr(123456789.987654321) 
123456789.98765433 
1

Para obtener la precisión que se desee, se necesita algo como:

VALUES = [733948.45278935181, 733948.45280092594, 733948.45280092594] 
for v in VALUES: 
    print '%18.11f' % (v) 

Y el término Siempre he usado para esos dígitos después del punto decimal es " esos dígitos después del punto decimal ". :-)

Cuestiones relacionadas