J'ai une chaîne au format: 'nn.nnnnn' en Python, et j'aimerais la convertir en un entier.
La conversion directe échoue:
>>> 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'
Je peux le convertir en décimal en utilisant:
>>> from decimal import *
>>> d = Decimal(s)
>>> print d
23.45678
Je pourrais aussi diviser sur '.', Puis soustraire la décimale à zéro, puis l'ajouter au nombre entier ... beurk.
Mais je préférerais l'avoir comme un int, sans conversions de type inutiles ni manœuvres.
Que dis-tu de ça?
>>> s = '23.45678'
>>> int(float(s))
23
Ou...
>>> int(Decimal(s))
23
Ou...
>>> int(s.split('.')[0])
23
Je doute que cela deviendra beaucoup plus simple que cela, j'en ai bien peur. Accepte-le et passe à autre chose.
Quel type de comportement d'arrondi voulez-vous? Avez-vous 2,67 à transformer en 3, ou 2. Si vous souhaitez utiliser l'arrondi, essayez ceci:
s = '234.67'
i = int(round(float(s)))
Sinon, il suffit de:
s = '234.67'
i = int(float(s))
>>> s = '23.45678'
>>> int(float(s))
23
>>> int(round(float(s)))
23
>>> s = '23.54678'
>>> int(float(s))
23
>>> int(round(float(s)))
24
Vous ne précisez pas si vous voulez arrondir ou non ...
"Convertir" n'a de sens que lorsque vous passez d'un type de données à un autre sans perte de fidélité. Le nombre représenté par la chaîne est un float et perdra de la précision s'il est forcé d'entrer dans un int.
Vous voulez plutôt arrondir, probablement (j'espère que les chiffres ne représentent pas la monnaie, car l'arrondir devient beaucoup plus compliqué).
round(float('23.45678'))
Vous pouvez utiliser:
s = '23.245678'
i = int(float(s))
L’expression int(float(s))
mentionnée par d’autres est la meilleure solution si vous souhaitez tronquer la valeur. Si vous voulez arrondir, utilisez int(round(float(s))
si l'algorithme round correspond à ce que vous voulez (voir la documentation round ), sinon vous devriez utiliser Decimal
et un si ses algorithmes d'arrondi.
round(float("123.789"))
vous donnera une valeur entière, mais un type float. Cependant, avec Python, le type réel n’est généralement pas très pertinent. Cela arrondira également la valeur, ce que vous ne voudrez peut-être pas. Remplacez 'round' par 'int' et vous l'aurez simplement tronqué et un int réel. Comme ça:
int(float("123.789"))
Mais, encore une fois, le «type» réel n’est généralement pas si important.