2010-07-13 14 views
10

Ho uno script che genera alcuni numeri (in particolare le volte in formato epoca).Stampa numeri in pitone

Ogni volta che genera un numero, aggiungo il numero a un array (denominato VALUES) e stampo sia l'array che quel numero. Tuttavia, il numero non contiene il numero di posti dopo il decimale come numero nell'array.

Ad esempio, un esempio di output sarà simile a questa (dopo 3 iterazioni):

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

Il terzo numero nella matrice corrisponde al valore in numero.

Come mai contengono un numero diverso di posizioni dopo il decimale?

Off-topic: quali sono i numeri dopo il decimale chiamato? Pensavo ci fosse un termine matematico per loro, non riesco a ricordare cosa sia.

Nota: il codice era in python.

risposta

9

Quando python stampa un numero, talvolta stampa più cifre decimali in base al fatto che il metodo interno stia chiamando repr o str (che converte entrambi il numero in una stringa). repr restituirà più posizioni decimali, mentre non lo è.

print chiamate str, quindi quando si esegue print Number, lo tralascia un po '. Tuttavia, quando si converte un elenco di numeri in una stringa quando si esegue print VALUES, l'elenco utilizzerà internamente repr, assegnandogli più posizioni decimali.

In sintesi, a seconda di come viene stampato, verranno visualizzate diverse quantità di cifre decimali. Tuttavia, internamente, è ancora lo stesso numero.

Se si vuole forzarlo ad utilizzare un determinato numero di cifre decimali, si può fare questo:

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

Hmmm. Non sapevo nemmeno che esistesse un metodo repr(). Grazie mille. – Paul

4

Quando si stampa l'elenco, stampa repr (x) per ogni x nella lista.

Quando si stampa il numero, viene stampato str (x).

Ad esempio:

>>> print 123456789.987654321 
123456789.988 

>>> print [123456789.987654321] 
[123456789.98765433] 

>>> print str(123456789.987654321) 
123456789.988 

>>> print repr(123456789.987654321) 
123456789.98765433 
1

Per ottenere la precisione che si desidera, è necessario qualcosa di simile:

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

E il termine che ho sempre usato per quelle cifre dopo la virgola decimale è " quelle cifre dopo il punto decimale ". :-)