13 Stimmen

python truncate nach einem Hunderter?

Wie kann eine Eingabe wie 315.15321531321 abgeschnitten werden? Ich möchte alle Werte nach der Hundertstelstelle abschneiden, so dass es 315,15 wird.

Wie kann ich das tun?

14voto

Jarret Hardie Punkte 89900

String-Formatierung unter Python 2.x sollte es für Sie tun:

>>> print '%.2f' % 315.15321531321
315.15

Dadurch wird die Darstellung der Zeichenkette auf nur 2 Dezimalstellen begrenzt. Beachten Sie, dass Sie bei der Verwendung von round(315.153215, 2) erhalten Sie einen weiteren Fließkommawert, der natürlich ungenau ist (oder übergenau, je nachdem, wie Sie es betrachten):

>>> round(315.15321531321, 2)
315.14999999999998

Technisch gesehen, round() ist korrekt, aber es "kürzt" die Ergebnisse nicht ab, wie Sie es unter 315.15 . Wenn Sie außerdem einen Wert wie 315,157 runden, ergibt sich etwas, das näher an 315,16 liegt... Ich bin nicht sicher, ob Sie das mit "abschneiden" meinen.

9voto

rainerpm Punkte 193

Es sieht so aus, als ob print "%.2f" auch die Rundung übernimmt. Hier ist Python-Code, der rundet und abschneidet

num = 315.15627
print("rounded   = %.2f" % num)
print("truncated = %.2f" % (int(num*100)/float(100)))

print(f'rounded   = {num:.2f}')
print(f'truncated = {int(num*100)/float(100):.2f}')

**Outputs**
rounded   = 315.16
truncated = 315.15
rounded   = 315.16
truncated = 315.15

6voto

Dave Punkte 9913

Wenn Sie mit Währungsbeträgen arbeiten, empfehle ich Ihnen dringend, stattdessen die Dezimalklasse von Python zu verwenden: http://docs.python.org/library/decimal.html

3voto

sth Punkte 210180

Wenn Sie sie nur gekürzt anzeigen möchten, können Sie die "%f" Formatierungsflagge:

value = 315.123123123
print "Value is: %.2f" % value

Wenn Sie die "zusätzlichen" Ziffern wirklich abschneiden wollen, machen Sie etwas wie:

from math import trunc
value = trunc(value*100)/100

2voto

eod Punkte 372

Vielleicht hilft Ihnen das weiter:

a=315.15321531321
a=a*100
a=int(a)
a=a/100.0
print(a)
315.15

Erläuterung: Wenn Sie auf die zweite Dezimalstelle runden wollen, sollten Sie dies tun:
1. Multiplizieren Sie Ihre Zahl mit 100; dies ergibt 31515.321531321,
2. diese neue Zahl in eine ganze Zahl umwandeln; int(31515.321531321) ergibt 31515,
3. Teilen Sie dies durch 100,0; 31515/100,0,
4. und Sie erhalten die richtige Antwort; 315.15

Viel Spaß!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X