Hallo ich muss umbedingt für meine Programmierung ausgeben lassen wieviele Nachkommastellen eine Zahl (sie ist von Typ float) hat. Im Grunde will ich nämlich aus zb. 1.25 --> 125 und aus 1.38726 --> 138726 machen da die Anzahl der Nachkommastellen variert brauche ich eine Operation, kann mir jemand helfen?
MFG
Frage zu float
Floats sind interessant. Guck dir mal die Zahlen in dem Beispiel unten an und beantworte folgende Frage: „Wie viele Nachkommastellen haben diese Zahlen jeweils deiner Meinung nach?”
Edit: Folgender Link mag für dich hilfreich sein: http://floating-point-gui.de/
Code: Alles auswählen
In [1]: 0.1 + 0.2
Out[1]: 0.30000000000000004
In [2]: 1 / 3.0
Out[2]: 0.3333333333333333
In [3]: 1 / 7.0
Out[3]: 0.14285714285714285
In [4]: from math import pi, e
In [5]: pi
Out[5]: 3.141592653589793
In [6]: e
Out[6]: 2.718281828459045Beispiel 1:
Versteh nicht so ganz warum 0.1 + 0.2 != 0.3 sein sollen...
Beispiel 2:
Unendlich, der Compiler rundet irgendwann weil er der Meinung ist das reicht jetzt mal.
Beispiel 3+4+5:
Siehe 2:
(Bei pi mag es sein das die Zahl schon vorher gerundert wurde, vor dem import...
Danke für den Link =)
(ps: oh mist waren die Fragen jetzt rhetorisch? :O)
Versteh nicht so ganz warum 0.1 + 0.2 != 0.3 sein sollen...
Beispiel 2:
Unendlich, der Compiler rundet irgendwann weil er der Meinung ist das reicht jetzt mal.
Beispiel 3+4+5:
Siehe 2:
(Bei pi mag es sein das die Zahl schon vorher gerundert wurde, vor dem import...
Danke für den Link =)
(ps: oh mist waren die Fragen jetzt rhetorisch? :O)
-
BlackJack
@Eliazz: Das ist relevant, denn was denkst Du wie viele Nachkommastellen ein selbst eingegebenes 0.1 hat? Kleiner Tipp: Diese Zahl kann intern nicht verlustfrei gespeichert werden, weil 1/10 im Binärsystem eine unendliche Periode hat, dort also irgendwo abgebrochen werden muss wenn die Bits „aufgebraucht” sind.
Lassen wir uns doch mal 60 Nachkommastellen von 0.1 ausgeben:
Lassen wir uns doch mal 60 Nachkommastellen von 0.1 ausgeben:
Code: Alles auswählen
In [5]: '{0:.60f}'.format(0.1)
Out[5]: '0.100000000000000005551115123125782702118158340454101562500000'Du musst du die Eingabe irgendwo als String abspeichern und z.B. mittels `len(gespeicherte_eingabe.split('.')[1])` die Anzahl an eingegebenen Nachkommastellen ermitteln.Eliazz hat geschrieben:edit: Hm die Seite beantwortet meine Frage nicht wirklich, eigentlich ist das alles ziemlich unrelevant für mein Problem ich brauche nur die Anzahl der Nachkommastellen einer SELBST eingegebenen float
Nein, bei einer rhetorischen Frage ist die Antwort offensichtlich was bei meinen Beispielen nicht der Fall war. Meine Frage war dazu da, zum Nachdenken anzuregen und das hat hoffentlich auch funktioniertEliazz hat geschrieben:(ps: oh mist waren die Fragen jetzt rhetorisch? :O)
Unter Umständen sind floats auch gar nicht das was du suchst sondern decimal:
Und an die Nachkommastellen kommt man bei Decimal recht einfach. Die Funktion as_tuple() gibt einen named Tuple zurück. In "exponent" steht dann die Anzahl der Nachkommastellen, allerdings als negative Zahl.
Code: Alles auswählen
>>> from decimal import Decimal
>>> Decimal("0.1") + Decimal("0.2")
Decimal('0.3')