Convertir une chaîne de chiffres str en nombre int, float en Python

Affaires

Si vous souhaitez convertir une chaîne de chiffres en valeurs numériques en Python, utilisez int() pour convertir en nombres entiers et float() pour convertir en nombres à virgule flottante.

Ce qui suit est expliqué ici, avec un exemple de code.

  • Utilisation de base
    • Convertir des chaînes numériques en nombres entiers:int()
    • Convertir une chaîne de chiffres en nombres à virgule flottante:float()
  • Usage spécial
    • Convertit les chaînes de caractères en notation binaire, octale et hexadécimale en nombres.
    • Convertit les chaînes de caractères en notation exponentielle en valeurs numériques
    • Convertir les chaînes de chiffres arabes pleine largeur en nombres
    • Convertir une chaîne de caractères chinois en chiffres

Pour convertir une valeur numérique en une chaîne de caractères, utilisez str().

Si vous souhaitez convertir des nombres ou des chaînes de caractères dans différents formats, utilisez la fonction format() ou la méthode str.format(). Vous pouvez alors convertir en notation 0-fill, binaire, octale, hexadécimale, exponentielle, etc. Consultez l'article suivant pour plus de détails.

Il peut également convertir une liste de chaînes de caractères en une liste de nombres. Voir l'article suivant pour plus de détails.

Convertir des chaînes numériques en nombres entiers: int()

Vous pouvez utiliser int() pour convertir une chaîne de chiffres en nombres de type entier.

print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>

Les décimales, y compris les points décimaux, et les chaînes de caractères séparées par des virgules entraîneront une ValueError.

# print(int('1.23'))
# ValueError: invalid literal for int() with base 10: '1.23'

# print(int('10,000'))
# ValueError: invalid literal for int() with base 10: '10,000'

Les chaînes délimitées par des virgules peuvent être converties en supprimant la virgule (en la remplaçant par une chaîne vide) à l'aide de la méthode replace().

print(int('10,000'.replace(',', '')))
# 10000

Convertir une chaîne de chiffres en nombres à virgule flottante: float()

Un float() peut être utilisé pour convertir une chaîne de chiffres en un type de nombre à virgule flottante.

print(float('1.23'))
print(type(float('1.23')))
# 1.23
# <class 'float'>

Les chaînes de caractères dont la partie entière est omise sont converties en complétant la partie entière par 0.

print(float('.23'))
# 0.23

Les chaînes d'entiers sont également converties en nombres à virgule flottante.

print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>

Convertit les chaînes de caractères en notation binaire, octale et hexadécimale en nombres.

Si un radix est spécifié comme second argument de int(), la chaîne peut être convertie en un entier int en la considérant comme binaire, octal, hexadécimal, etc.

print(int('100', 2))
print(int('100', 8))
print(int('100', 16))
# 4
# 64
# 256

Comme dans les exemples précédents, s'il est omis, le nombre est considéré comme un nombre décimal.

print(int('100', 10))
print(int('100'))
# 100
# 100

Si le radix est fixé à 0, la conversion est basée sur le préfixe de la chaîne. Voir ci-dessous pour les préfixes de chaîne.

  • 0b
    • 0B
  • 0o
    • 0O
  • 0x
    • 0X
print(int('0b100', 0))
print(int('0o100', 0))
print(int('0x100', 0))
# 4
# 64
# 256

Les préfixes et les alphabets hexagonaux peuvent être en majuscules ou en minuscules.

print(int('FF', 16))
print(int('ff', 16))
# 255
# 255

print(int('0xFF', 0))
print(int('0XFF', 0))
print(int('0xff', 0))
print(int('0Xff', 0))
# 255
# 255
# 255
# 255

Consultez l'article suivant pour obtenir des informations sur l'interconversion des nombres et des chaînes de caractères binaires, octaux et hexadécimaux.

Convertit les chaînes de caractères en notation exponentielle en valeurs numériques

Les chaînes de caractères en notation exponentielle peuvent être converties directement en type flottant avec float().

print(float('1.23e-4'))
print(type(float('1.23e-4')))
# 0.000123
# <class 'float'>

print(float('1.23e4'))
print(type(float('1.23e4')))
# 12300.0
# <class 'float'>

Le e minuscule peut également être mis en majuscule.

print(float('1.23E-4'))
# 0.000123

Convertir les chaînes de chiffres arabes pleine largeur en nombres

Les chiffres arabes pleine largeur peuvent être convertis directement en nombres par int() ou float().

print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>

print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>

Toutefois, si des symboles tels que les moins et les points décimaux sont des caractères pleine largeur, une ValueError sera générée.

# print(float('ー1.23'))
# ValueError: could not convert string to float: '1.23'

Les nombres peuvent être convertis sans problème s'ils sont des caractères de pleine largeur, mais les moins et les points décimaux sont des caractères de demi-largeur. La conversion est possible en remplaçant les symboles de pleine largeur par des symboles de demi-largeur à l'aide de la méthode replace().

print(float('-1.23'))
# -1.23

print(float('ー1.23'.replace('ー', '-').replace('.', '.')))
# -1.23

Convertir une chaîne de caractères chinois en chiffres

La fonction unicodedata.numeric() du module unicodedata peut être utilisée pour convertir un seul caractère chinois Unicode en un nombre de type virgule flottante.

S'il ne s'agit pas d'une seule lettre, une erreur se produira. De même, les caractères non numériques provoqueront une erreur.

import unicodedata

print(unicodedata.numeric('五'))
print(type(unicodedata.numeric('五')))
# 5.0
# <class 'float'>

print(unicodedata.numeric('十'))
# 10.0

print(unicodedata.numeric('参'))
# 3.0

print(unicodedata.numeric('億'))
# 100000000.0

# print(unicodedata.numeric('五十'))
# TypeError: numeric() argument 1 must be a unicode character, not str

# print(unicodedata.numeric('漢'))
# ValueError: not a numeric character