今回は、文字列を数値に変換して演算する方法について解説します。
また、理解を深めるには「データ型の変換について!」も、参照してください。
文字列型と数値型
文字列型と数値型
データ型が異なる場合、プログラムは異なる動作をするため、データ型を指定する必要があります。
# (例)「数値型」の場合
# 出力します。
print(5 + 5)
# 出力結果は、「10」となります。
# (指定をしなくても自動的に数値型になります。)
# (例)「文字列型」(数字を文字として扱いたい場合)
# 出力します。
print('5' + '5')
# 出力結果は、「55」となり、数値ではなく文字として扱われます。
上記のように、数字を文字として扱いたい場合は、クオーテーションまたは、ダブルクオーテーションを付けることで文字列型として指定できます。
数値型にしたい場合は、指定をしなくても自動的に数値型になります。
(例)
print(‘5’ + 5)
「文字列型」と「数値型」を連結するとエラーになってしまいます。
そして今度は、2つのデータ型が異なる「文字列型」と「数値型」を連結すると、上記のようにエラーになってしまうのですが、文字列型か数値型に変換して統一することでデータとして扱えるようになります。
データ型を変えることを「型変換」といいます。
int() 関数を使う
int() 関数を使う
数値と文字列で演算を行うには、文字列を数値に変換する必要があります。
文字列を数値に変換するには、「int() 関数」や「float() 関数」を使います。
まずは「int() 関数」について解説します。
int() 関数とは
「int() 関数」は、引数に指定した数値や文字列を整数に変換して取得します。
浮動小数点数が指定された場合は、0に近い値の整数として取得されます。
例
a = "3"
print(int(a))
# 実行結果: 3
b = "3.14"
print(int(b))
# 実行結果: 3
float() 関数を使う
float() 関数を使う
float () 関数とは
「float () 関数」は、引数に指定した数値または文字列を浮動小数点数に変換して取得します。
整数や浮動小数点数が指定された場合、同じ値の浮動小数点数が返されます。
例
a = "3"
print(float(a))
# 実行結果: 3.0
b = "3.14"
print(float(b))
# 実行結果: 3.14
文字列型を数値型に変換し演算する
文字列型を数値型に変換し演算する
演算をするには「int() 関数」や「float() 関数」を使うことで、数値の場合と同じように扱うことができるようになります。
例
# (例)変数 「count1」 に値を代入します。
count1 = '7'
# 変数 「count1」 を数値型に変換し、int関数を使い、計算させて出力します。
print(int(count1) + 3)
# 実行結果: 10
# (例)変数 「count2」 に値を代入します。
count = '3.155'
# 変数 「count2」 を数値型に変換し、float関数を使い、計算させて出力します。
print (4.5 + float(count2))
# 実行結果: 7.654999999999999
文字列をint()関数で変換するとエラーになるケース
文字列をint()関数で変換するとエラーになるケース
float()関数は、実数を対象としていますが、int()関数は整数に限定されるため、思わぬところでエラーになることがあります。
ここでは、int()関数でエラーになる原因を解説します。
(例)整数の文字列は全角数字や初めに0を使っても正しく変換できます。
a = "123"
print(int(a))
# 実行結果: 123
a = "0123"
print(int(a))
# 実行結果: 123
(エラー例1)千の位にカンマがある文字列
千の位ごとの桁区切りにカンマ(,)がある整数の文字列をint()関数で変換しようとするとエラーになります。
この場合の解決策は、文字列メソッドの「str.replace( ) 」を使ってカンマを取り除いてから、int()関数で変換します。
int("123,000,000".replace(",",""))
123000000
(エラー例2)単位を使った文字列
整数の文字列にkmやkgなどの単位が付いている場合、int()関数で変換しようとするとエラーになります。
この場合の解決策は、数字の文字だけを、filter()関数を使って取得し、文字列メソッドのstr.join()で結合し、int()関数で変換します。
int("".join(filter(str.isdigit, "50kg")))
50
list(filter(str.isdigit, "50kg"))
"".join([ '5', '0',])
'50'
str.isdigit("5")
True
str.isdigit("0")
True
str.isdigit("k")
False