Allgemeine Frage zu float und int Zahlen/Umwandlungen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Frohe Ostern zusammen,
wenn ich eine float-Zahl (z.B. 2.7) in eine int-Zahl konvertieren möchte, wird dabei gerundet. Das Ergebnis wäre 2. Welchen Wert muss man denn dann einer FLoat-Zahl x addieren, um beispielsweise eine kaufmännische Rundung von x zu erreichen.

Also das meine ich: 2.7 -> gerundet zu 3 oder 2.3 -> gerundet zu 2

Könnt Ihr mir da weiterhelfen? Vielen Danke für Antworten!
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Hallo duodiscus,

addiere einfach 0.5 zu der Zahl bevor du int anwendest: z.B: int(2.3+0.5)

oder benutze die Funktion round(). Aber Achtung, soweit ich weiß ändert round ab Python 3 sein Verhalten.

Grüße,
anogayales
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wenn du kaufmaennisch runden willst, suchst du `round`:

Code: Alles auswählen

In [3]: int(round(2.7, 0))
Out[3]: 3

In [4]: int(round(2.3, 0))
Out[4]: 2

In [5]: int(round(2.5, 0))
Out[5]: 3
Fuer die ganz allgemeine Frage, wie viel man addieren muss, man eben den Rest heranziehen:

Code: Alles auswählen

In [6]: 2.3 % 1
Out[6]: 0.2999999999999998
Und daran eine Fallunterscheidung machen.
Sirius3
User
Beiträge: 17759
Registriert: Sonntag 21. Oktober 2012, 17:20

@anogayales: die Variante mit +0.5 funktioniert bei negativen Zahlen nicht. round liefert ein float als Ergebnis, man muß es also noch zusätzlich in ein int wandeln.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

cofi hat geschrieben:
Fuer die ganz allgemeine Frage, wie viel man addieren muss, man eben den Rest heranziehen:

Code: Alles auswählen

In [6]: 2.3 % 1
Out[6]: 0.2999999999999998
Und daran eine Fallunterscheidung machen.
Und woran kann man das jetzt allgemein erklären? :?:
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Was meinst du damit? Der Rundungsmodus ist nicht mehr als eine Fall-Unterscheidung nach den Zahlen nach dem Komma.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Ich verstehe nicht, wie mich das auf die Lösung der Frage bringt:
Welchen Wert ich einer Fließkommazahl x addieren muss, um einer kaufmännische Rundung dieser Zahl zu erreichen. Beispielsweise 2.7 zu 3. Da wäre der Divisionsrest 2.7%1= 0.700000000002. Aber das bringt mich ja nicht zur Lösung der Frage.
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

duodiscus hat geschrieben:Ich verstehe nicht, wie mich das auf die Lösung der Frage bringt
Ich hingegen verstehe dein Problem nicht wirklich. Was an folgendem Beispiel ist denn nicht so, wie du es haben möchtest?

Code: Alles auswählen

>>> int(round(2.7))
3
>>> int(round(2.3))
2
Es gibt allerdings Unterschied zwischen Python 2 und Python 3. Unter Python 2 wird dir ein round(2.5) einen Wert von 3.0 liefern, unter Python 3 einen Wert von 2.
Antworten