2012-11-19 12 views
6

Das Problem, das ich habe, ist meine Ergebnisse auf 2 Dezimalstellen gerundet. Meine App bekommt die richtigen Ergebnisse, aber Ich habe Schwierigkeiten machen die App Runde auf die nächste Dezimalstelle wie bei WährungsRunde eine Antwort auf 2 Dezimalstellen 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") 

so zum Beispiel, wenn der 12 Monate Preis ist $ 23, die 6 Monate Preis ist 13,799999999999999 aber ich will es zeigen 13.80

Ich habe mich um Google und wie man eine Runde runden, konnte aber nicht viel Hilfe finden, um ein Ergebnis zu runden.

+0

Nur ein Punkt über Ihre Multiplikatoren für 12 Monate, 6 Monate und 3 Monate Kosten ... Ich denke, diese sollten 1, 0,5 und 0,25 statt 1, 0,6 und 0,36 sein. Sie nehmen 50% von 12 Monaten (6 Monaten) und 25% von 12 Monaten (3 Monate). – dhj

+0

@dhj Es ist möglich, dass das OP ein Abonnement-System schreibt, das die besten Rabatte basierend auf der Dauer der Abonnements gewährt. Abonnieren Sie für sechs Monate für 13,80 $, aber Abonnement für zwölf Monate ist 4,60 $ billiger über die Kosten des Jahres! – kreativitea

+0

@kreativitea ... ausgezeichneter Punkt! Ich mache viel Mathematik/Wissenschaft Datenverarbeitung. Peinliche Annahme meinerseits. – dhj

Antwort

10

sollten Sie eine Formatangabe verwenden:

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

Noch besser, man sollte überhaupt nicht verlassen Punktzahlen auf schwimmenden und verwenden Sie das decimal Modul statt, die Sie mit beliebiger Genauigkeit gibt und vieles mehr Kontrolle über die Rundungsmethode:

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

Wäre dies jenseits von Währungsformaten, hätte es im Allgemeinen keine bessere Leistung, wenn wir einen Format-Bezeichner für reguläre Python-Dezimalzahlen verwenden, als den ['Dezimalsymbol] (http://docs.python.org/2/library/) zu verwenden. decimal.html) Modul? – jvriesem

2

Ein klassischer Weg ist es, mit 100 zu multiplizieren, fügen Sie 0,5 (das ist zu runden) und int() das Ergebnis. Jetzt haben Sie die Anzahl der gerundeten Cents, dividieren Sie sie erneut durch 100, um den runden Float zurück zu bekommen.

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

Wenn Sie wollen, dass es nur drucken, wird Zeichenfolge Formatierung arbeiten:

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

Wenn Sie nur als String haben wollen, kann Format helfen:

format(cost, '.2f') 

Diese Funktion gibt eine Zeichenfolge, die gemäß der Definition in dem zweiten Parameter formated wird. Wenn also cost 3.1418 enthält, gibt der obige Code den String '3.14' zurück.

Verwandte Themen