Convertire stringa numerica str in numero int, float in Python

Attività commerciale

Se volete convertire una stringa di numeri in valori numerici in Python, usate int() per convertire in numeri interi e float() per convertire in numeri a virgola mobile.

Ciò che segue è spiegato qui, insieme al codice di esempio.

  • Uso di base
    • Convertire stringhe numeriche in interi:int()
    • Convertire una stringa di numeri in numeri in virgola mobile:float()
  • Uso speciale
    • Converte le stringhe in notazione binaria, ottale ed esadecimale in numeri
    • Converte stringhe in notazione esponenziale in valori numerici
    • Convertire stringhe di numeri arabi a tutta larghezza in numeri
    • Convertire una stringa di caratteri cinesi in numeri

Per convertire un valore numerico in una stringa, usate str().

Se volete convertire numeri o stringhe in vari formati, usate la funzione format() o il metodo str.format(). Poi potete convertire in notazione 0-fill, binaria, ottale, esadecimale, esponenziale, ecc. Vedi il seguente articolo per i dettagli.

Può anche convertire una lista di stringhe in una lista di numeri. Vedi il seguente articolo per i dettagli.

Convertire stringhe numeriche in interi: int()

Potete usare int() per convertire una stringa di numeri in numeri di tipo intero.

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

I decimali, compresi i punti decimali, e le stringhe separate da virgole risulteranno in un 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'

Le stringhe delimitate da virgole possono essere convertite rimuovendo la virgola (sostituendola con una stringa vuota) usando il metodo replace().

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

Convertire una stringa di numeri in numeri in virgola mobile: float()

Una float() può essere usata per convertire una stringa di numeri in un tipo di numero in virgola mobile.

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

Le stringhe con la parte intera omessa sono convertite completando la parte intera con 0.

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

Le stringhe intere sono anche convertite in numeri in virgola mobile.

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

Converte le stringhe in notazione binaria, ottale ed esadecimale in numeri

Se viene specificato un radix come secondo argomento a int(), la stringa può essere convertita in un intero int considerandola come binaria, ottale, esadecimale, ecc.

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

Come negli esempi precedenti, se omesso, il numero è considerato un numero decimale.

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

Se il radix è impostato a 0, la conversione è basata sul prefisso della stringa. Vedi sotto per i prefissi delle stringhe.

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

I prefissi e gli alfabeti esadecimali possono essere sia maiuscoli che minuscoli.

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

Vedi il seguente articolo per informazioni sull'interconversione di numeri e stringhe binarie, ottali ed esadecimali.

Converte stringhe in notazione esponenziale in valori numerici

Le stringhe in notazione esponenziale possono essere convertite direttamente al tipo float con 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'>

La e minuscola può anche essere scritta con la E maiuscola.

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

Convertire stringhe di numeri arabi a tutta larghezza in numeri

I numeri arabi a tutta larghezza possono essere convertiti direttamente in numeri da int() o float().

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

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

Tuttavia, se i simboli come il meno e i punti decimali sono caratteri di piena larghezza, verrà generato un ValueError.

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

I numeri possono essere convertiti senza problemi se sono caratteri di piena larghezza, ma i meno e i punti decimali sono caratteri di mezza larghezza. La conversione è possibile sostituendo i simboli di piena larghezza con quelli di mezza larghezza usando il metodo replace().

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

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

Convertire una stringa di caratteri cinesi in numeri

La funzione unicodedata.numeric() nel modulo unicodedata può essere usata per convertire un singolo carattere cinese Unicode in un numero in virgola mobile.

Se non è una sola lettera, si verificherà un errore. Inoltre, i caratteri non numerici causeranno un errore.

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
Copied title and URL