Seite 1 von 1
Wie teilt man, sodass eine rationale Zahl rauskommt?
Verfasst: Freitag 10. März 2017, 23:18
von Aries
Hallo, ich möchte einer Variablen einen Bruch zuweisen, und möchte, dass dabei eine rationale Zahl rauskommt.
Es kommen aber ganze Zahlen heraus:
Was mache ich falsch?
Re: Wie teilt man, sodass eine rationale Zahl rauskommt?
Verfasst: Freitag 10. März 2017, 23:30
von kbr
@Aries: Du verwendest Python 2; das ist der Chuck Norris Modus: wenn Chuck Norris teilt, bleibt kein Rest!

Re: Wie teilt man, sodass eine rationale Zahl rauskommt?
Verfasst: Samstag 11. März 2017, 00:44
von 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``.
Re: Wie teilt man, sodass eine rationale Zahl rauskommt?
Verfasst: Samstag 11. März 2017, 09:59
von bwbg
Vorsicht: Gleitkommazahlen sind keine rationalen Zahlen. Für letztere gibt es das Modul fractions.
Re: Wie teilt man, sodass eine rationale Zahl rauskommt?
Verfasst: Donnerstag 23. März 2017, 21:01
von olman
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
>>>
Re: Wie teilt man, sodass eine rationale Zahl rauskommt?
Verfasst: Donnerstag 23. März 2017, 21:26
von 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'