Wie teilt man, sodass eine rationale Zahl rauskommt?

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
Aries
User
Beiträge: 51
Registriert: Mittwoch 21. August 2013, 01:19

Hallo, ich möchte einer Variablen einen Bruch zuweisen, und möchte, dass dabei eine rationale Zahl rauskommt.

Es kommen aber ganze Zahlen heraus:

Code: Alles auswählen

>>> x = 1/2
>>> x
0
>>> x = 3/2
>>> x
1
Was mache ich falsch?
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@Aries: Du verwendest Python 2; das ist der Chuck Norris Modus: wenn Chuck Norris teilt, bleibt kein Rest! 8)
BlackJack

@Aries: In Python 2 muss mindestens eine der beiden Zahlen bei der Division eine Gleitkommazahl sein, oder Du machst als ersten Import in dem Modul ``from __future__ import division``.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Vorsicht: Gleitkommazahlen sind keine rationalen Zahlen. Für letztere gibt es das Modul fractions.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
olman
User
Beiträge: 2
Registriert: Donnerstag 23. März 2017, 20:43

Lege fest wieviel Nachkommastellen du haben willst. Und dann verwende round().

Code: Alles auswählen

>>> x = round(1.0/2,2)
>>> x
0.5
>>> x = round(3.0/2,2)
>>> x
1.5
>>> x = round(1.0/3,2)
>>> x
0.33
>>> x = round(1.0/3,4)
>>> x
0.3333
>>> 
BlackJack

@olman: Und das hat jetzt *was* mit der Frage zu tun? Die Frage war ja wie man *überhaupt* Nachkommastellen bekommt, nicht wie man weniger bekommt. Wobei `round()` relativ selten wirklich das ist was die Leute wollen, meistens geht es ja nur um die Anzeige, und das Verhalten von `round()` finden einige Leute auch überraschend die sich um Runden noch nie so wirklich Gedanken gemacht haben:

Code: Alles auswählen

In [16]: [round(0.5 + i) for i in range(10)]
Out[16]: [0, 2, 2, 4, 4, 6, 6, 8, 8, 10]
Zudem darf man wie üblich bei Gleitkommazahlen nicht vergessen das auch `round()` nicht generell die Anzahl der Nachkommastellen begrenzen kann wenn die Zahl nicht exakt als Gleitkommazahl repräsentierbar ist, wie beispielsweise 0.1:

Code: Alles auswählen

In [17]: '%.50f' % 0.1
Out[17]: '0.10000000000000000555111512312578270211815834045410'

In [18]: '%.50f' % round(0.1, 1)
Out[18]: '0.10000000000000000555111512312578270211815834045410'
Antworten