Pythonで数字の文字列strを数値int, floatに変換
Pythonで数字の文字列str
を数値に変換したい場合、整数に変換するにはint()
、浮動小数点数に変換するにはfloat()
を使う。
ここでは、
- 数字の文字列を整数に変換:
int()
- 数字の文字列を浮動小数点数に変換:
float()
の基本的な使い方、および、特殊な場合である、
- 2進数、8進数、16進数表記の文字列を数値に変換
- 指数表記の文字列を数値に変換
- 全角アラビア数字の文字列を数値に変換
- 漢数字の文字列を数値に変換
について、サンプルコードとともに説明する。
なお、数値を文字列に変換する場合はstr()
を使えばよい。
数値や文字列を0埋めや2進数、8進数、16進数、指数表記など様々な書式に変換したい場合はformat()
関数または文字列メソッドstr.format()
を使う。以下の記事を参照。
また、文字列のリストを数値のリストに変換することもできる。以下の記事を参照。
数字の文字列を整数に変換: int()
int()
で数字の文字列を整数int
型の数値に変換できる。
print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>
.
を含む小数、,
で桁区切りされた文字列はエラー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'
カンマ区切りされた文字列はreplace()
メソッドで,
を削除(空文字列''
に置換)すれば変換可能。
print(int('10,000'.replace(',', '')))
# 10000
replace()
については以下の記事を参照。
数字の文字列を浮動小数点数に変換: float()
float()
で数字の文字列を浮動小数点数float
型の数値に変換できる。
print(float('1.23'))
print(type(float('1.23')))
# 1.23
# <class 'float'>
整数部が省略された文字列は整数部に0
が補完されて変換される。
print(float('.23'))
# 0.23
整数の文字列も浮動小数点数float
型の数値に変換される。
print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>
2進数、8進数、16進数表記の文字列を数値に変換
int()
の第二引数に基数を指定すると、文字列を2進数、8進数、16進数などとみなして整数int
に変換できる。
print(int('100', 2))
print(int('100', 8))
print(int('100', 16))
# 4
# 64
# 256
これまでの例のように、省略した場合は10進数とみなされる。
print(int('100', 10))
print(int('100'))
# 100
# 100
基数を0
とすると、文字列のプレフィックス(0b
, 0o
, 0x
または0B
, 0O
, 0X
)をもとに変換される。
print(int('0b100', 0))
print(int('0o100', 0))
print(int('0x100', 0))
# 4
# 64
# 256
プレフィックスや16進数のアルファベットは大文字でも小文字でもどちらでもよい。
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
2進数、8進数、16進数の数値・文字列の相互変換については、以下の記事を参照。
指数表記の文字列を数値に変換
指数表記の文字列はfloat()
でそのまま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'>
e
は大文字のE
でもよい。
print(float('1.23E-4'))
# 0.000123
全角アラビア数字の文字列を数値に変換
全角のアラビア数字はint()
やfloat()
でそのまま数値に変換できる。
print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>
print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>
ただし、マイナス-
や小数点のピリオド.
などの記号が全角だとエラーValueError
になる。
# print(float('ー1.23'))
# ValueError: could not convert string to float: '1.23'
数字が全角でマイナス-
、小数点のピリオド.
が半角だと問題なく変換できる。replace()
メソッドで全角の記号を半角の記号に置換すれば変換可能。
print(float('-1.23'))
# -1.23
print(float('ー1.23'.replace('ー', '-').replace('.', '.')))
# -1.23
漢数字の文字列を数値に変換
unicodedataモジュールのunicodedata.numeric()
関数を使うとUnicodeの漢数字一文字を浮動小数点数float
型の数値に変換できる。
一文字じゃないとエラーTypeError
、数字ではない文字もエラーValueError
になる。
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
二文字以上の漢数字を数値に変換したい場合、以下の記事で公開されている漢数字の文字列を半角アラビア数字の文字列に変換するコードが便利。
取得できた半角アラビア数字をint()
やfloat()
で数値に変換すればよい。