2012-11-19 27 views
6

Il problema che sto avendo è il mio arrotondamento i miei risultati a 2 cifre decimali. La mia app ottiene i giusti risultati, però, sto avendo difficoltà a fare il giro applicazione alle due cifre decimali, come si farebbe con valutaArrotonda una risposta a 2 posizioni decimali in Python

cost = input("\nEnter the 12 month cost of the Order: ") 
cost = float(cost) 

print("\n12 Month Cost:", 
    cost * 1,"USD") 
print("6 Month Cost:", 
    cost * 0.60,"USD") 
print("3 Month Cost:", 
    cost * 0.36,"USD") 

così per esempio se il prezzo 12 mesi è di $ 23, il prezzo di sei mesi è 13,799999999999999 ma voglio che mostri 13.80

Ho cercato su google e su come arrotondare un numero, ma non ho trovato molto aiuto per arrotondare un risultato.

+0

Solo un punto sui moltiplicatori per i costi di 12 mesi, 6 mesi e 3 mesi ... Penso che questi dovrebbero essere 1, 0,5 e 0,25 anziché 1, 0,6 e 0,36. Stai prendendo il 50% di 12 mesi (6 mesi) e il 25% di 12 mesi (3 mesi). – dhj

+0

@dhj È possibile che l'OP stia scrivendo un sistema di abbonamento che offre i migliori sconti in base al periodo di tempo sottoscritto. Abbonati per sei mesi a $ 13,80, ma abbonandoti per dodici mesi costa $ 4,60 in meno rispetto al costo dell'anno! – kreativitea

+0

@kreativitea ... ottimo punto! Faccio un sacco di elaborazione dei dati matematica/scientifica. Assunzione imbarazzante da parte mia. – dhj

risposta

10

È necessario utilizzare un identificatore di formato:

print("6 Month Cost: %.2fUSD" % (cost * .6)) 

Ancora meglio, non si dovrebbe fare affidamento su numeri a virgola mobile a tutti e utilizzare il modulo decimal, invece, che vi dà la precisione arbitraria e molto altro ancora il controllo sul metodo di arrotondamento:

from decimal import Decimal, ROUND_HALF_UP 
def round_decimal(x): 
    return x.quantize(Decimal(".01"), rounding=ROUND_HALF_UP) 

cost = Decimal(input("Enter 12 month cost: ")) 
print("6 Month Cost: ", round_decimal(cost * Decimal(".6"))) 
+0

Prendendo questo oltre i formati di valuta, non avrebbe generalmente prestazioni migliori se usassimo uno specificatore di formato su numeri decimali Python regolari piuttosto che usare il ['decimale'] (http://docs.python.org/2/library/ decimal.html) modulo? – jvriesem

2

Un modo classico è moltiplicare per 100, aggiungere 0,5 (questo è per arrotondare) e int() il risultato. Ora hai il numero di centesimi arrotondati, dividi per 100 di nuovo per recuperare il galleggiante arrotondato.

cost = 5.5566 
cost *= 100 # cost = 555.66 
cost += 0.5 # cost = 556.16 
cost = int(cost) # cost = 556 
cost /= float(100) # cost = 5.56 

cost = 5.4444 
cost = int((cost * 100) + 0.5)/float(100) # cost = 5.44 
1

se si desidera solo per stampare, formattazione di stringhe funzionerà:

print("\n12 Month Cost:%.2f USD"%(cost*1)) 
2

Se si desidera solo per averlo come una stringa, formato può aiutare:

format(cost, '.2f') 

Questa funzione restituisce una stringa che viene formattato come definito nel secondo parametro. Quindi se il costo contiene 3,1418 il codice sopra restituisce la stringa '3,14'.

Problemi correlati