2016-11-05 5 views
1

Wir alle wissen, dass, wenn wir die letzte Zahl von 1182973981273983 finden möchten, welche 3 wir dies einfach tun:Suche nach der letzten Ziffer der Dezimalzahl

>>> print(1182973981273983 % 10) 
3 

Aber wenn ich will, die letzte Zahl von 2.387.123,23 bekommen Ich dachte daran, dies zu tun:

>>> 2387123.23 % 10 ** (-1 * 2) 
0.009999999931681564 

Aber es funktioniert nicht. Was ist der mathematische Weg, um die letzte Zahl eine Dezimalzahl zu bekommen?

p.s. String-Lösungen sind ungültig. Wir sind Programmierer, wir müssen wissen, wie Mathe funktioniert.

+2

Dazu Sie Strings oder BigDecimals verwenden Runden schwimmt Willen worek, wie Sie sie sehen, sind gut definiert, aber nicht nützlich für die Rundung siehe http://stackoverflow.com/questions/588004/ is-floating-point-math-broken und für Ihren letzten Kommentar [Was jeder Informatiker über Fließkomma-Arithmetik wissen sollte] (Was jeder Informatiker über Fließkomma-Arithmetik wissen sollte) – Mark

+5

'3' ist nicht die letzte Dezimalzahl Es ist nur so formatiert, dass es so aussieht. –

+0

String-Lösungen sind gültig, da die String-Formatierung Mathe versteht. Wenn Sie meinen, dass Sie Präzisionsfehler in Fließkommadarstellungen verstehen wollen, dann ist das etwas anderes. –

Antwort

2

Wie bereits in den Kommentaren erwähnt, ist dies bei Gleitkommazahlen nicht möglich; das Konzept der letzten Dezimalstelle gilt einfach nicht. Siehe Links in Kommentaren für weitere Details.

Auf der anderen Seite würde dies funktionieren, wenn Sie Festkomma-Arithmetik (d. H. Der Decimal-Typ) verwenden würden. Dann könnte eine Lösung wie folgt aussehen:

>>> import decimal 
>>> d = decimal.Decimal('3.14') 
>>> d.as_tuple().digits[-1] 
4