Python / int() / Convertir des valeurs en entiers
En Python, int() transforme une chaîne représentant un entier ou un nombre pris en charge en objet entier. Les flottants sont tronqués vers zéro : int(-2.7) donne -2, sans arrondi ni plancher. Une chaîne avec un point décimal, telle que "12.0", ne se convertit pas directement.
Conversion élémentaire et valeur renvoyée
int(value) renvoie un int ; sans argument, le résultat est zéro. Les chaînes sont décimales par défaut et acceptent espaces extérieurs, signe et caractères de soulignement correctement placés entre les chiffres. True et False deviennent 1 et 0. Consultez la référence officielle de int() pour les formes acceptées.
Il suffit de Python 3. Enregistrez chaque exemple complet en UTF-8 dans int_example.py et lancez python int_example.py, ou python3 selon votre installation. Remplacez le contenu pour tester chaque exemple indépendamment.
print(int())
print(int(" +123 "))
print(int("1_024"))
print(int(True), int(False))
text = "12"
number = int(text)
print(number + 3, type(number).__name__)
print(text, type(text).__name__)
Résultat attendu :
0
123
1024
1 0
15 int
12 str
Affecter le résultat à une autre variable ne modifie pas la chaîne initiale. Convertir "12" permet d’ajouter le nombre 3 pour obtenir 15. Si une quantité ne doit pas accepter de booléens, rejetez-les séparément au lieu de vous fier à la réussite de la conversion.
Tronquer, arrondir et prendre le plancher
La troncature vers zéro retire la partie fractionnaire quel que soit le signe. En revanche, math.floor() choisit le plus grand entier inférieur ou égal à la valeur, d’où une différence pour les nombres négatifs. Les colonnes montrent la valeur, int(), math.floor() et round().
import math
for value in (2.7, -2.7):
print(value, int(value), math.floor(value), round(value))
2.7 2 2 3
-2.7 -2 -3 -3
Pour -2.7, int() donne -2 et floor() donne -3. Choisissez une fonction d’arrondi si votre règle de calcul l’exige. Un flottant peut déjà contenir une erreur de représentation ; la conversion entière ne retrouve pas une valeur décimale souhaitée perdue auparavant.
Lire le binaire et l’hexadécimal avec base
int(text, base) fixe la base de la représentation d’entrée. Les bases autorisées sont 2 à 36 ou 0 ; zéro détecte notamment les préfixes 0b, 0o et 0x. Avec une base explicite, le premier argument doit être une chaîne ou un format d’octets accepté, pas un objet numérique.
print(int("1010", 2))
print(int("ff", 16))
print(int("0xff", 0))
print(int("0b1010", 0))
print(int("010"))
print(int("010", 8))
try:
print(int("010", 0))
except ValueError:
print("ValueError")
10
255
255
10
10
8
ValueError
"010" vaut dix avec la base par défaut et huit en base huit. La base zéro refuse cette forme commençant par zéro sans préfixe. L’entier obtenu ne conserve pas un format d’affichage hexadécimal : utilisez séparément hex() ou format() pour sa présentation.
Erreurs de conversion et précision des grands entiers
Une représentation incorrecte peut provoquer ValueError ; un type incompatible, TypeError. L’infini produit OverflowError et NaN (« pas un nombre »), ValueError. Cet exemple intercepte seulement les exceptions attendues afin de continuer à examiner les autres entrées.
for value in ("12.0", "1e3", "1,000", "", None, float("nan"), float("inf")):
try:
print(repr(value), int(value))
except (ValueError, TypeError, OverflowError) as error:
print(repr(value), type(error).__name__)
'12.0' ValueError
'1e3' ValueError
'1,000' ValueError
'' ValueError
None TypeError
nan ValueError
inf OverflowError
int(float(text)) change les règles : il lit une notation décimale ou exponentielle puis tronque. Une grande chaîne entière peut perdre de l’information dès l’étape flottante à cause des limites de représentation des flottants.
text = "9007199254740993"
print(int(text))
print(int(float(text)))
9007199254740993
9007199254740992
Pour lire exactement un entier, utilisez directement int(text). Les entiers Python ne sont pas limités à 32 ou 64 bits fixes, mais la mémoire et les ressources restent finies. Depuis Python 3.11, les limites de conversion des chaînes entières peuvent aussi restreindre des conversions très longues dans certaines bases. Limitez les entrées externes à des longueurs et valeurs utiles plutôt que de désactiver ces protections.
Valider une quantité positive ou nulle
Une conversion réussie ne garantit pas une valeur métier valide. Cette fonction accepte une chaîne, la convertit et rejette les résultats négatifs. Zéro est permis ; signes, espaces et soulignements restent volontairement admis selon les règles de int().
def parse_count(text):
if not isinstance(text, str):
raise TypeError("text must be a string")
value = int(text)
if value < 0:
raise ValueError("count must be non-negative")
return value
for text in (" 3 ", "-1", "2.5", ""):
try:
print(repr(text), parse_count(text))
except ValueError:
print(repr(text), "invalid count")
' 3 ' 3
'-1' invalid count
'2.5' invalid count
'' invalid count
Les quantités incorrectes provoquent ValueError. Une interface peut demander une nouvelle saisie par gestion des exceptions. Ajoutez un plafond ou une vérification des seuls chiffres ASCII si nécessaire. Remplacer toutes les erreurs par zéro les rendrait impossibles à distinguer d’un vrai zéro.




