Python Geld-Problem?

2 Antworten

Für den Zweck ist die BuiltIn-Funktion divmod(x,y) geradezu wie geschaffen.

Diese führt eine Ganzzahldivision mit Rest durch und gibt den Quotienten und den Rest zurück.

Beispiel:

>>> betrag = 800.01
>>> anzahl500, betrag = divmod(betrag, 500)
>>> anzahl200, betrag = divmod(betrag, 200)
>>> print(anzahl500, anzahl200)
1.0 1.0

fjijhfudhzfz 
Beitragsersteller
 12.10.2019, 08:41

Ich habe noch eine Frage: Ich habe das Programm jetzt bis zu den Centbeträgen so weitergeführt, doch bei 845,77 € gibt er mir 845,76€ aus. Liegt das an meinem Programm?

0
Isendrak  12.10.2019, 08:48
@fjijhfudhzfz

Jein. Das liegt daran, dass der Datentyp float keine unbegrenzte Genauigkeit hat.

Immerhin lässt sich das Problem in diesem Fall so beheben:

anzahl500, betrag = divmod(betrag, 500)
betrag = round(betrag, 2)
anzahl200, betrag = divmod(betrag, 200)
betrag = round(betrag, 2)
#...

Also nach jeder Division den verbleibenden Betrag auf 2 Nachkommastellen runden.

1
Isendrak  12.10.2019, 11:27
@fjijhfudhzfz

Eine Kleinigkeit vielleicht noch:

Um ohne das ganze Runden auszukommen rechne einfach in Centbeträgen.

Also z.B. so:

betrag=int(845.77*100) #Keine Nachkommastellen, keine Probleme. ^^
anzahl500, betrag = divmod(betrag, 50000) #50000¢=500€
anzahl200, betrag = divmod(betrag, 20000) #20000¢=200€
#usw...
0
ralphdieter  13.10.2019, 10:17
@Isendrak

845.77 könnte intern als 845.76999... gespeichert werden. Schreib also besser

betrag=round(845.77*100)
1
Isendrak  13.10.2019, 10:19
@ralphdieter

Stimmt auch wieder. Aber dann, um ganz sicherzugehen, dass sich nicht irgendwo doch noch etwas unganzzahliges versteckt:

betrag=int(round(845.77*100))
0
fjijhfudhzfz 
Beitragsersteller
 12.10.2019, 08:36

Danke, deine Antwort hat mir wirklich geholfen das Problem zu lösen.😁

0

Tipp:

nennen wir den eingegebenen Betrag x.

die Vorkommastelle von x/500 gibt an, wieviele 500er man benötigt

Hilft das?


fjijhfudhzfz 
Beitragsersteller
 12.10.2019, 08:35

Danke für deine Antwort

0