文字列を数値型に型変換する方法
int() と float() に、変換したい文字列を渡します。整数(int型) = int(<文字列>)
浮動小数点数(float型) = float(<文字列>)
サンプルコード
次のサンプルコードは 文字列 '123' を int型 へ、文字列 '123.456' を float型 へ変換します。int_value = int('123')
float_value = float('123.456')
変換エラーに対処する
変換できない場合はエラーが発生するので、try を使用して例外を捕捉します。try:
int_value = int(<文字列>)
<変換に成功した場合の処理>
except Exception as err:
<変換に失敗した場合の処理>
else:
<変換に成功した場合の処理>
finally:
<常に実行される処理>
<常に実行される処理>
サンプルコード
文字列 'abcd' は int型 へ変換できないため、エラーメッセージ が表示されます。try:
int_value = int('abcd')
except Exception as err:
print(err) # 結果 = invalid literal for int() with base 10: 'abcd'
変換エラーが発生するケース
桁区切りのカンマ
カンマ(,) が含まれていると ValueError が発生します。事前に空文字列に置換するとエラーを回避できます。int('1,000') # ValueError: invalid literal for int() with base 10: '1,000'
float('1,000') # ValueError: could not convert string to float: '1,000'
次のサンプルコードは replace() メソッドを使用し、カンマを空文字列に置換してから型変換します。
int_Value = int('1,000'.replace(',', ''))
print(int_Value) # 結果 = 1000
None と 空文字列
None を渡すと TypeError、空文字列を渡すと ValueError が発生します。int(None) # TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'
float(None) # TypeError: float() argument must be a string or a real number, not 'NoneType'
int('') # ValueError: invalid literal for int() with base 10: ''
float('') # ValueError: could not convert string to float: ''
次のサンプルコードは三項演算子を使用し、変数の値が None か 空文字列 のときは 0 を返します。
str_value = None
int_value = int(str_value) if (str_value is not None) and (str_value != '') else 0
print(int_value) # 結果 = 0
小数点
int型に変換するとき、文字列中に 小数点 が含まれていると ValueError が発生します。int('1.1') # ValueError: invalid literal for int() with base 10: '1.1'
n進数(2進数、8進数、16進数など)
int() の第二引数に基数(記数法)を指定できます。たとえば 2 を渡すと 2進数、16を渡すと16進数として変換されます。print(int('100', 2)) # 結果 = 4
print(int('100', 8)) # 結果 = 64
print(int('100', 10)) # 結果 = 100
print(int('100', 16)) # 結果 = 256
print(int('100', 32)) # 結果 = 1024
print(int('100', 36)) # 結果 = 1296
プレフィックス付きの文字列を変換したい場合、第二引数に 0 を指定します。
# 2進数
print(int('0b100', 0)) # 結果 = 4
print(int('0B100', 0)) # 結果 = 4
# 8進数
print(int('0o100', 0)) # 結果 = 64
print(int('0O100', 0)) # 結果 = 64
# 16進数
print(int('0x100', 0)) # 結果 = 256
print(int('0X100', 0)) # 結果 = 256
指数表記(E表記)
E表記の指数文字列を float() に渡すと、float型に変換できます。 E は大文字でも小文字でも変換できます。print(float('1.234E2')) # 結果 = 123.4
print(float('1.234e2')) # 結果 = 123.4
print(float('-1.234E2')) # 結果 = -123.4
print(float('-1.234e2')) # 結果 = -123.4
print(float('1.234E-2')) # 結果 = 0.01234
print(float('1.234e-2')) # 結果 = 0.01234
print(float('-1.234E-2')) # 結果 = -0.01234
print(float('-1.234e-2')) # 結果 = -0.01234
無限大(inf) と 非数(nan、not a number)
float() に 'infinity' または 'inf' を渡すと 無限大、'nan' を渡すと 非数 になります。 大文字小文字が混在してもエラーにはなりません。# 無限大
print(float('infinity')) # 結果 = inf
print(float('Infinity')) # 結果 = inf
print(float('inf')) # 結果 = inf
print(float('Inf')) # 結果 = inf
# 非数
print(float('nan')) # 結果 = nan
print(float('NAN')) # 結果 = nan
print(float('Nan')) # 結果 = nan
全角数値
全角数値も変換可能ですが、+ー符号 と 小数点 は 半角に変換しないと ValueError が発生します。print(int('+100')) # 結果 = 100
print(int('-100')) # 結果 = -100
print(float('+123.456')) # 結果 = 123.456
print(float('-123.456')) # 結果 = -123.456
# int('+100') # ValueError: invalid literal for int() with base 10: '+100'
# int('ー100') # ValueError: invalid literal for int() with base 10: 'ー100'
# float('+123.456') # ValueError: could not convert string to float: '+123.456'
# float('ー123.456') # ValueError: could not convert string to float: 'ー123.456'
次のサンプルコードは replace() メソッドを使用し、全角記号を半角記号に変換してから型変換をします。
int('+100'.replace('+', '+')) # 結果 = 100
int('ー100'.replace('ー', '-')) # 結果 = -100
float('+123.456'.replace('+', '+').replace('.', '.')) # 結果 = 123.456
float('ー123.456'.replace('ー', '-').replace('.', '.')) # 結果 = -123.456
参考資料
検証環境
- Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)] on win32
- Microsoft Windows 10 Enterprise Version 22H2 OS Build 19045.3693 Experience: Windows Feature Experience Pack 1000.19053.1000.0