「Pythonの文字列を数値に変換する方法」の版間の差分
提供: Python入門
(ページの作成:「Python の文字列を数値に変換する方法をまとめました。文字列をそのまま数値だと思って扱うと、文字列として計算した結果と...」) |
|||
(同じ利用者による、間の1版が非表示) | |||
行17: | 行17: | ||
== Python の文字列を数値に変換する方法 == | == Python の文字列を数値に変換する方法 == | ||
str に数字が入っている前提です。 | str に数字が入っている前提です。 | ||
+ | |||
+ | str を整数に変換します。 | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
i = int(str) | i = int(str) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | str を float に変換します。 | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
f = float(str) | f = float(str) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | str を long に変換します。 | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
l = long(str) | l = long(str) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
== どういった場合におかしくなるのか == | == どういった場合におかしくなるのか == | ||
数値データの入っている CSV ファイルを csv モジュールでロードしたときに、データが文字列として入ってきます。 | 数値データの入っている CSV ファイルを csv モジュールでロードしたときに、データが文字列として入ってきます。 | ||
行69: | 行74: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 関連項目 == | == 関連項目 == | ||
+ | * [[Pythonで整数を割り算したときに小数を切り捨てない方法]] | ||
* [[Pythonのリスト型]] | * [[Pythonのリスト型]] | ||
* [[Pythonの集合型]] | * [[Pythonの集合型]] |
2018年4月1日 (日) 23:53時点における最新版
Python の文字列を数値に変換する方法をまとめました。文字列をそのまま数値だと思って扱うと、文字列として計算した結果と数値として計算した結果で異なる場合が出てきてしまいます。
読み方
- int
- いんと
- long
- ろんぐ
- float
- ふろーと
概要
Python には、データに型があります。ほかのスクリプト言語でも同様の問題があるかもしれませんが、文字列を数字だと思って計算すると、予期せぬ結果になって戸惑うこともあるかと思います。
Python の数値型
Python には、以下の数値の型があります。
- int
- float
- long
- complex
Python の文字列を数値に変換する方法
str に数字が入っている前提です。
str を整数に変換します。
i = int(str)
str を float に変換します。
f = float(str)
str を long に変換します。
l = long(str)
どういった場合におかしくなるのか
数値データの入っている CSV ファイルを csv モジュールでロードしたときに、データが文字列として入ってきます。
以下のコードがサンプルコートです。
import csv f = open("foo.csv", "r") reader = csv.reader(f, delimiter=',') for row in reader: if (row[0] < row[1]): 処理A
row[0] に 文字列 100.39, row[1]に 文字列 99,22 の場合に、本来であれば、処理Aが実行しない想定だが、文字列として比較すると if 文が真になり、処理Aを実行してしまいます。
以下のコードを実行すると
a = "100.39" b = "99.22" print (a < b)
下記のように
True
となります。
データが想定外の型で扱っているので、想定外のことが起きるのは当たり前なのですが、 プログラマの想定外のことがおきてしまいます。
ではどうなっていればよかったと言えば、 このサンプルでは
a = float("100.39") b = float("99.22") print (a < b)
となっていれば、 a も b も float 型として扱われるので、(a < b) は、False の結果が得られます。
型の調べ方
変数が何の型として扱われているか調べる方法は、 type を使用します。
print type(str)