wake-up-neo.com

Konvertieren Sie eine Zeichenfolge in Dezimalzahl in Python in eine Ganzzahl

Ich habe einen String im Format: 'nn.nnnnn' in Python, und ich möchte ihn in eine Ganzzahl konvertieren.

Direkte Konvertierung schlägt fehl:

>>> s = '23.45678'
>>> i = int(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '23.45678'

Ich kann es mit Hilfe von:

>>> from decimal import *
>>> d = Decimal(s)
>>> print d
23.45678

Ich könnte auch auf '.' Aufteilen, dann die Dezimalzahl von Null abziehen und diese dann zur ganzen Zahl addieren ... yuck.

Aber ich würde es vorziehen, es als int zu haben, ohne unnötige Typumwandlungen oder Manövrierungen.

48
Matt Hampel

Wie wäre es damit?

>>> s = '23.45678'
>>> int(float(s))
23

Oder...

>>> int(Decimal(s))
23

Oder...

>>> int(s.split('.')[0])
23

Ich bezweifle, dass es viel einfacher werden wird, fürchte ich. Akzeptieren Sie es einfach und machen Sie weiter.

97

Welche Art von Rundungsverhalten möchten Sie? Müssen Sie 2,67 in 3 oder 2 verwandeln? Wenn Sie die Rundung verwenden möchten, versuchen Sie Folgendes:

s = '234.67'
i = int(round(float(s)))

Ansonsten machen Sie einfach:

s = '234.67'
i = int(float(s))
13
Dan Lorenc
>>> s = '23.45678'
>>> int(float(s))
23
>>> int(round(float(s)))
23
>>> s = '23.54678'
>>> int(float(s))
23
>>> int(round(float(s)))
24

Sie geben nicht an, ob Sie eine Rundung wünschen oder nicht ...

3
Kevin Little

"Konvertieren" ist nur dann sinnvoll, wenn Sie ohne Verlust der Genauigkeit von einem Datentyp zu einem anderen wechseln. Die durch die Zeichenfolge dargestellte Zahl ist ein Float und verliert an Genauigkeit, wenn sie in ein Int gezwungen wird.

Sie möchten stattdessen wahrscheinlich runden (ich hoffe, dass die Zahlen keine Währung darstellen, da die Rundung dann viel komplizierter wird).

round(float('23.45678'))
2
JosefAssad

Du könntest benutzen:

s = '23.245678'
i = int(float(s))
1
gbc

Der von anderen erwähnte Ausdruck int(float(s)) ist der beste, wenn Sie den Wert abschneiden möchten. Wenn Sie eine Rundung wünschen, verwenden Sie int(round(float(s)), wenn der Rundungsalgorithmus Ihren Wünschen entspricht (siehe round documentation ). Andernfalls sollten Sie Decimal und eine der Rundungsalgorithmen verwenden.

1
Kathy Van Stone
round(float("123.789"))

gibt Ihnen einen ganzzahligen Wert, aber einen Float-Typ. Bei der Python-Enten-Typisierung ist der tatsächliche Typ jedoch normalerweise nicht sehr relevant. Dadurch wird auch der Wert gerundet, den Sie möglicherweise nicht möchten. Ersetzen Sie 'round' durch 'int' und Sie haben es einfach abgeschnitten und ein tatsächliches int. So was:

int(float("123.789"))

Aber auch hier ist der tatsächliche "Typ" normalerweise nicht so wichtig.

0
rledley