2012-01-08 8 views
5

Sto lavorando su un programma che memorizza numeri come float che eventualmente scrivo in un file come valuta. Attualmente sto usando la funzione round() per arrotondarlo a 2 decimali, ma il settore degli affari vorrebbe che raggiungessi il prossimo penny indipendentemente dal terzo decimale. Ad esempio:

x = 39.142 

In questo caso sto cercando di ottenere x per arrotondare a 39.15. Ovviamente quando faccio la funzione rotonda ottengo 39.14 ...

>>> round(x, 2) 
    39.14 

C'è un modo posso sempre arrotondare fino al prossimo centesimo? Dovrei ricordare che i numeri con cui ho a che fare sono stampati sul file come valuta.

+4

Se si tratta di valuta, non utilizzare i galleggianti. Sta solo chiedendo dei guai. Può essere fatto, ovviamente, ma è più un problema che ne vale la pena. – harold

+2

@LanceCollins: la risposta che hai selezionato è gravemente sbagliata. Vedi i miei commenti –

risposta

14

Utilizzando la decimal module:

import decimal 
D = decimal.Decimal 
cent = D('0.01') 

x = D('39.142') 
print(x.quantize(cent,rounding=decimal.ROUND_UP)) 
# 39.15 

decimali hanno molte opzioni per l'arrotondamento. Le opzioni e i loro significati possono essere trovati here.

+0

+1 Questa dovrebbe essere la risposta accettata. Tim dovrebbe essere cancellato. –

+0

Tim: ho accettato le risposte di unutbu. –

1

se si desidera scriverlo in centesimi, è possibile utilizzare int (x * 100 + .5) per ottenere centesimi interi da dollari float.

Problemi correlati