Python-Kurs / Ganze Zahlen, float und Decimal richtig unterscheiden
Python verwendet int für ganze Zahlen und float für binäre Gleitkommazahlen. Wenn exakte Dezimalregeln erforderlich sind, wählen Sie passende ganzzahlige Einheiten oder Decimal und legen Sie Einheit sowie Rundungsregel ausdrücklich fest.
Arithmetische Operatoren genau lesen
| Ausdruck | Bedeutung | Ergebnis |
|---|---|---|
7 / 2 |
Division | 3.5 |
7 // 2 |
Division mit Abrunden zum kleineren ganzzahligen Ergebnis | 3 |
7 % 2 |
Rest der Division | 1 |
2 ** 3 |
Potenz | 8 |
Die Division mit // rundet in Richtung minus unendlich, nicht in Richtung null. Deshalb ergibt -7 // 2 den Wert -4. Die Umwandlung int(-3.5) schneidet dagegen den Nachkommaanteil in Richtung null ab und ergibt -3. Diese beiden Regeln sind bei negativen Werten sichtbar verschieden.
Schreiben Sie in Python-Dezimalliteralen einen Punkt, zum Beispiel 3.5. Ein deutsches Dezimalkomma ist an dieser Stelle kein Ersatz für den Punkt. Verwenden Sie Klammern, wenn die Priorität verschiedener Operatoren Ihre Rechenabsicht unklar machen würde. Python-Ganzzahlen haben keinen fest vorgegebenen 32-Bit-Wertebereich; praktisch sind Größe und Rechenaufwand dennoch durch Ressourcen begrenzt. Die Referenz der numerischen Typen beschreibt die Operatoren.
Ein vollständiges Beispiel mit Zahlentypen ausführen
Speichern Sie den gesamten Code in numeric_demo.py, in UTF-8, im Übungsordner. decimal gehört zur Standardbibliothek; Sie müssen dafür kein Paket installieren. Starten Sie python numeric_demo.py mit dem Projektinterpreter. Unter macOS oder Ubuntu kann außerhalb einer virtuellen Umgebung python3 der passende Befehl sein.
from decimal import Decimal
print(7 / 2, 7 // 2, 7 % 2)
print(-7 // 2, int(-3.5))
print(0.1 + 0.2 == 0.3)
print(Decimal("0.1") + Decimal("0.2"))
price_won = 3500
print(price_won * 3)
Erwartete Ausgabe:
3.5 3 1
-4 -3
False
0.3
10500
Die erste Zeile vergleicht Division, Bodendivision und Rest. Die zweite zeigt den Unterschied zwischen Abrunden und Abschneiden bei negativen Zahlen. False bedeutet, dass die beiden float-Werte beim exakten Vergleich nicht gleich sind. Die nächste Zeile verwendet aus Text erzeugte Dezimalzahlen; zuletzt werden drei ganzzahlige Won-Beträge von jeweils 3500 multipliziert.
Viele endliche Dezimalbrüche besitzen keine endliche binäre Darstellung. Deshalb kann float nur einen nahen darstellbaren Wert speichern. Das ist keine Besonderheit einer falschen Python-Installation. Das offizielle Tutorial über Gleitkomma-Arithmetik erläutert Darstellung und Anzeige.
Umwandlung, Genauigkeit und Anzeige trennen
int("3500") liest eine Zeichenkette als ganze Zahl. int("3.5") scheitert mit ValueError, während int(3.5) aus einem bereits vorhandenen float den Nachkommaanteil abschneidet. float("3.5") erzeugt dagegen einen float. Achten Sie also darauf, ob Sie Text einlesen oder eine Zahl in einen anderen Typ umwandeln.
Decimal stellt dezimale Zahlen dar. Erzeugen Sie einen eingegebenen Dezimalwert direkt aus einer passenden Zeichenkette, etwa Decimal("0.1"). Bei Decimal(0.1) wird der bereits approximierte float übernommen; dessen Abweichung verschwindet dadurch nicht. Die Dokumentation zu decimal beschreibt außerdem Rechengenauigkeit, Rundung und Fehlerbedingungen.
Auch Dezimalrechnen braucht Regeln: Nicht jede Division hat eine endliche Darstellung, und die eingestellte Präzision sowie Rundung beeinflussen Ergebnisse. Entscheiden Sie diese Vorgaben entsprechend Ihrer Daten und Berechnungen, statt allein aus dem Namen des Typs unbegrenzte Genauigkeit abzuleiten.
format(0.1 + 0.2, ".2f") ergibt den Text "0.30". Das verkürzt die Anzeige, verändert aber nicht nachträglich den gespeicherten float-Wert. Die Ausgabe ist zudem Text, nicht automatisch ein neuer exakter Zahlenwert. Vergleichen Sie Anzeige und ursprünglichen Wert getrennt, wenn Sie ein Ergebnis prüfen.
Einheiten und problematische Eingaben überprüfen
Für ganze Won kann der Wert 3500 direkt als ganze Zahl gespeichert werden. Bei Euro könnte eine dokumentierte ganzzahlige Cent-Einheit sinnvoll sein; bei anderen Anforderungen kommen Dezimalwerte infrage. Einheit, Währung und Rundung müssen mit der Anwendung festgelegt werden. Ein Zahlentyp entscheidet diese Regeln nicht selbst, und das Beispiel führt keine Währungsumrechnung aus.
- Vergleichen Sie
-7 // 2mit-7 / 2. Erwarten Sie-4beziehungsweise-3.5. Erklären Sie danach den Unterschied zuint(-3.5). - Ändern Sie im ersten
printnur den Divisor von7 / 2zu null. Beim Ausführen mussZeroDivisionErrorauftreten. Stellen Sie den Divisor zwei wieder her, bevor Sie weiterarbeiten. - Versuchen Sie in einer eigenen interaktiven Prüfung
int("3500 KRW"). Die enthaltene Einheit verhindert die direkte Integer-Umwandlung. Legen Sie zuerst das akzeptierte Eingabeformat fest, statt beliebige Zeichen unbemerkt zu entfernen. - Ändern Sie im vollständigen Programm nur
price_won = 3500zuprice_won = 4000. Die letzte Zeile muss12000zeigen. Stellen Sie den Ausgangswert wieder her und vergleichen Sie die vollständige Originalausgabe.
Die Eingabe-und-Ausgabe-Übung zeigt, an welcher Stelle aus Benutzertext eine Zahl wird. Prüfen Sie dort Form und zulässigen Bereich getrennt: Eine erfolgreich gelesene negative Zahl kann für einen bestimmten Ausgabentyp trotzdem unzulässig sein.




