sec01 - 整数[int] 浮動小数点数[float]

Pyhtonで数値のデータを扱うとき、その値が整数なのか浮動小数点数なのかを区別してコードを書く必要があります。Pythonのメジャーバージョンが3になってからは、整数と浮動小数点数の区別があまりできていなくても不具合は出にくくなりました。しかし、数値の基本ですし、他のプログラミング言語を学習する時にも必ず意識する部分ですので、しっかり学習しましょう。

Pythonの数値型

Pythonで扱える数値の型は、整数、浮動小数点数、複素数があります。

このサイトでは、複素数は登場しません。(初学者には難しく、一般の方は扱う機会が少ないため。) そのため、複素数を扱ったコードを書きたいという方は、『Python 複素数』などのキーワードで検索してみてください。扱い方など、多くの情報が出てきます。

整数(int)

整数とは、"0", "15", "-20"のような数値のデータ型のことを言います。大雑把にいうと"小数や分数ではない数値"です。ゼロやマイナスの値も整数としてPythonは扱います。

Pythonでは、整数を"int"と表現します。"int"は"integer (整数の意)"を略したものです。

浮動小数点数(float)

浮動小数点数とは、"0.0", "15.6", "-20.012"のような数値のデータ型のことで、"小数点を含む数値"のことを言います。ですので、"0.0"や"15.0"のように整数で表すことができる数値であっても、小数点を付けて値を定義するとPythonは浮動小数点数としてデータを扱います。

Pythonでは、浮動小数点数を"float"と表現します。"float"は"floating-point number (浮動小数点数の意)"を略したものです。

次のコードのように、それぞれ値を定義すれば、Pythonは自動的にint/ floatを識別して管理します。

num_int = 10  # 整数(int)として識別される
num_float = 10.0  # ".0"があるので、浮動小数点数(float)として識別される

計算にintとfloatの数値が混ざっている場合

Python3の場合は、計算にintfloatの数値が混ざっていても正しく計算できるようになっていますので、型をあまり意識しなくても、基本的には正しい結果を得られる場合がほとんどです。しかしPython2(メジャーバージョンが2)や他のプログラミング言語を扱う場合には計算結果がおかしくなる場合があるので、意識しながらコードを書けるようにしましょう。

intとfloatの計算 (例1)

例えば、"2 + 2.5"を行ったとき、Pythonは"4.5"という結果を出力します。

result = 2 + 2.5
print(result)  # 4.5が出力される

Pythonでは、int同士float同士はもちろんですが、intとfloatが混ざっていても問題なく計算することができます。

計算結果の型の調べ方

計算結果を出力した時に、"5.0"のように".0"が付いている場合、そのデータはfloatとしてデータが扱われていることになります。

例えば、次のコードのように"2.0 + 3"をすると"5.0"という値が出力されます。Pythonは、計算の中にfloatの値が存在している場合は、intの値をfloatに合わせて(変換して)計算を行います。ですので、計算結果のデータ型はfloatとなります。("5.0"だからといって、Pythonは勝手に整数("5")に変換しません。)

result = 2.0 + 3
print(result)  # "5.0"(float型) と出力される

厳密に、その値のを調べたいときは、"type()"という関数を使用します。"type()"の丸カッコの中に調べたい値を指定すると、その値の型情報を返してくれます。その返ってきた情報を"print"することで確認することができます。

print(type(result))  # "<class 'float'>" と出力される
[上記コードの解説] "print(type(result))"とありますが、Pythonの計算で一番優先度が高いのは丸カッコの中の処理です。ですので、"print()"の処理が行われるより前に、丸カッコの中の"type(result)"が処理されます。"type()"の丸カッコの中は"result"とありますので、Pythonは第一に"result"の値を参照します。"result"の値は"5.0"なので、今度は"type(5.0)"の処理を行います。最後に"print([type()の型情報])"を行うことで、TERMINAL上で型の情報を得ることができます。(注: "[type()の型情報]"とは、単純な数値や文字列で表すことができない、複合的な情報を保持しているデータです。詳しくはclassのレクチャーで解説します。)

尚、"print(type(result))"のコードを2行に分けて書いても問題ありません。結果は同じになります。

data_type = type(result)
print(data_type)  # "<class 'float'>" と出力される

intとfloatの計算 (例2)

今度は、割り算の例です。

Python3では、割り算の結果は全て浮動小数点数で返します。"整数 / 整数"の計算をした時も浮動小数点数の結果になります。"4 / 2"のように割り切れる数であっても浮動小数点数の"2.0"が返されます。
(*プログラミングで割り算を行うときはスラッシュ("/")の記号を使用します。)

result1 = 5 / 2
print(result1)  # "2.5"(float型)が出力される

result2 = 4 / 2
print(result2)  # "2.0"(float型)が出力される
"整数 / 整数"の挙動

Python3では、割り算の結果が小数点で含むものであった場合、素直に浮動小数点数で出力してくれます。しかし、他のプログラミング言語では違った結果になる可能性があるため、注意が必要です。(※Python2でも挙動が違います。)

他の言語では、"整数 / 整数"をすると答えが整数で返ってくるものがあります。例えば、"9 / 2"の結果が"4.5"ではなく"4"で返ってきます。挙動は言語によって変わってくるので、各言語の仕様を確認してください。(Python2はこの挙動でした。)

それでは、自動的に浮動小数点数で答えが返ってこないプログラミング言語で、整数同士の割り算をしたときに浮動小数点数の結果を得たいという場合どうするかというと、割る数か割られる数のどちらかの値をfloatに変換します。次のいずれかのパターンであれば、結果は浮動小数点数で返ってきます。

  • int / float
  • float / int
  • float / float

型を変換することをキャストと言います。intfloatに変換するには、"float(9)"のように書きます。そうすることで、"9 / 2"のような計算を"9.0 / 2"のようにプログラムに認識させることができるので、結果をfloatで得られます。

numA = 9  # int
numB = 2  # int
result = float(numA) / numB  # "float/int"の形に変換する
print(result)  # floatの値を得られる

※ これは、Python2他の言語の話なので、Python3を使用される場合は"9 / 2"のように記述していただいて大丈夫です。(Python3であっても、必ず動作テストを行い、何のデータ型を扱っているのかを常に意識するようにしてください。)

おすすめの記事