HOWTO · Python

Convertir un nombre à virgule flottante en un entier en Python

Cet article explique comment convertir un nombre à virgule flottante en entier en Python

Sur cette page

Pour convertir un nombre à virgule flottante en entier en Python, utilisez la fonction intégrée int() pour supprimer la partie fractionnaire en allant vers zéro. Si vous souhaitez une autre règle, utilisez math.ceil() pour obtenir le plus petit entier supérieur ou égal à la valeur, ou math.floor() pour obtenir le plus grand entier inférieur ou égal à celle-ci. La bibliothèque standard propose aussi math.trunc() pour tronquer en allant vers zéro. Choisissez la fonction dont le comportement correspond à votre calcul : ces fonctions ne donnent pas toutes le même résultat pour les valeurs négatives.

Convertir un nombre à virgule flottante en entier avec int()

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

number = 25.49
print(int(number))
25

Pour une valeur fractionnaire positive, int() supprime la partie fractionnaire. Pour une valeur négative, la conversion se fait également en allant vers zéro : int(-1.5) donne -1, et non -2. Il s’agit d’une troncature, pas d’un arrondi à l’entier le plus proche. Si vous devez arrondir à la valeur la plus proche, utilisez une opération d’arrondi au lieu de supposer que int() le fera.

int() accepte un nombre à virgule flottante, un entier et du texte représentant un entier, par exemple int("25"). Un texte contenant un séparateur décimal, comme "25.49", n’est pas une chaîne représentant un entier et ne peut pas être transmis directement à int(). Convertissez d’abord ce texte en nombre à virgule flottante, puis convertissez ce nombre si une troncature est souhaitée. Tenez compte du type d’entrée : transmettre une valeur numérique à virgule flottante et transmettre une chaîne sont deux conversions différentes.

La représentation d’un littéral à virgule flottante peut aussi différer de son écriture décimale. Par exemple, Python peut représenter 1.9999999999999999 sous la forme 2.0 ; appliquer ensuite int() à cette valeur déjà représentée renvoie l’entier correspondant à 2.0. Il n’existe pas de règle spéciale de int() pour les nombres contenant seize chiffres 9 ou plus. La conversion porte sur la valeur à virgule flottante obtenue après l’analyse du littéral : un résultat proche d’un entier peut donc s’expliquer à la fois par la représentation en virgule flottante et par la troncature.

Choisir entre troncature, plafond et plancher avec math

Utilisez le module math lorsque vous voulez appliquer une règle explicite. math.trunc() tronque en allant vers zéro, comme int() pour les nombres à virgule flottante. math.ceil() renvoie le plus petit entier supérieur ou égal à une valeur. math.floor() renvoie le plus grand entier inférieur ou égal à celle-ci. La différence compte pour les valeurs négatives : la troncature de -1.5 donne -1, tandis que le plancher donne -2 et le plafond -1. Pour les fractions positives, la troncature et le plancher donnent le même entier inférieur, tandis que le plafond donne l’entier supérieur.

L’exemple autonome suivant compare les valeurs positives et négatives avec les trois fonctions de la bibliothèque standard.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import math

for number in (1.5, -1.5):
    print(number, math.trunc(number), math.ceil(number), math.floor(number))
1.5 1 2 1
-1.5 -1 -1 -2

Utilisez int() ou math.trunc() pour supprimer la partie fractionnaire en allant vers zéro, math.ceil() lorsque le résultat ne doit pas être inférieur à la valeur d’entrée, et math.floor() lorsqu’il ne doit pas lui être supérieur. Par exemple, pour convertir une quantité mesurée en unités entières, déterminez si l’application doit ne retenir que les unités complètes, toujours en prévoir suffisamment ou ne compter que celles entièrement comprises dans la quantité. Indiquer cette règle dans le code facilite sa vérification et évite une direction d’arrondi involontaire.

Toutes ces fonctions renvoient des entiers Python pour les entrées numériques finies ordinaires. Elles ne conservent pas la partie fractionnaire. Si vos calculs suivants ont besoin de cette précision, gardez aussi le nombre à virgule flottante d’origine. Pour des quantités décimales qui nécessitent une arithmétique décimale exacte, demandez-vous si une représentation décimale conviendrait mieux avant la conversion : convertir un nombre à virgule flottante déjà approximé ne peut pas récupérer les chiffres décimaux perdus lors de sa représentation.