順番に読み進めながら学べます

int と float の使い方

Python の数値型 int と float の使い方を学びます。四則演算と / と // の違い、float の精度問題、型変換まで一通り図解で押さえます。

Pythonの数値は2種類

Pythonで数を扱う型は大きく 2種類あります。整数を扱う int と、小数を扱う float(浮動小数点数) です。

どちらも数なので、加減乗除や余りなどの基本的な計算はすべてできます。

ただし書き方と精度がそれぞれ違うため、場面に応じて使い分けます。

int と float の住み分け
25(数字のみ)int型整数<class 'int'>175.5(.を含む)float型浮動小数点数<class 'float'>型が決まるtype()型が決まるtype()

. を含めずに書けば int

. を含めて書けば float

両方とも type() で確認できる。

整数として書きたい数値であっても、3.0 のように .0 を付ければ float になります。逆に 175 とだけ書けば int です。

マイナスの値も -5 で int、-5.5 で float です。

# int(整数)
age = 25
print(type(age))      # <class 'int'>

# float(浮動小数点数)
weight = 175.5
print(type(weight))   # <class 'float'>

# 同じ「3」でも書き方で型が変わる
print(type(3))        # <class 'int'>
print(type(3.0))      # <class 'float'>

# マイナスもそれぞれ
print(type(-10))      # <class 'int'>
print(type(-10.5))    # <class 'float'>

ターミナルで int と float の違いを確認しましょう。

① count = 7 と pi = 3.14 を用意し、両方の値と型を print() で表示してください。

② print(type(3.0)) を書いて、3 と 3.0 で型が違うことを目で確かめてください。

Python エディタ

コードを実行してください

演算子をひと通り見る

数値計算で使う演算子は以下の7種類です。+ - * / の四則演算は他の言語と同じですが、//(整数除算)%(剰余)、**(べき乗) の3つは Python でよく使うので押さえておきましょう。

演算子意味結果
+加算10 + 313
-減算10 - 37
*乗算10 * 330
/除算(常に float)10 / 33.3333...
//整数除算(小数切り捨て)10 // 33
%剰余(割り算の余り)10 % 31
**べき乗2 ** 101024

「/」 は int 同士でも float を返す

10 / 25 ではなく 5.0(float)です。

Python の /常に float を返すように設計されているため、整数同士でも結果が float になります。

整数で結果が欲しい場合は // を使ってください。

# 四則演算
print(10 + 3)    # 13
print(10 - 3)    # 7
print(10 * 3)    # 30

# 除算は常に float
print(10 / 3)    # 3.3333333333333335
print(10 / 2)    # 5.0  (割り切れても float)

# 整数除算(切り捨て)と剰余
print(10 // 3)   # 3
print(10 % 3)    # 1

# べき乗:a ** b は「a の b 乗」
print(2 ** 10)   # 1024
print(3 ** 2)    # 9
print(2 ** 0.5)  # 1.4142135623730951  (平方根として使える)

seconds = 365 が何分・何秒になるかを計算してみましょう。

// を使って「何分か」を表示する。

% を使って「何秒か」を表示する。

③ `** を使って 2 の 8 乗(256)を表示する。

④ 10 / 2 を表示し、割り切れても float(5.0)になることを確かめる。

Python エディタ

コードを実行してください

複合代入演算子(+= / -= など)

「x = x + 1」 のように「自分自身に何かして書き戻す」処理は頻繁に登場します。

この書き方は 「x += 1」 と省略でき、これを複合代入演算子と呼びます。

`+ - / // % * のすべてに対応する形があります。

複合代入演算子のしくみ
x += 3x = x + 313x -= 3x = x - 37x *= 3x = x * 330x **= 2x = x ** 2100展開結果展開結果展開結果展開結果

短縮形は「自分自身に演算して書き戻す」を 1 行で書く構文。

内部的には必ず右側の「展開した形」と同じ動きをする。

例として x = 10 に各演算を当てはめた結果を示す。

score = 10

score += 5      # 10 + 5 → 15
print(score)    # 15

score *= 2      # 15 * 2 → 30
print(score)    # 30

score -= 7      # 30 - 7 → 23
print(score)    # 23

# float でも同じように使える
weight = 60.0
weight += 1.5
print(weight)   # 61.5

hp = 100 というキャラクターの HP を、複合代入で変化させてみましょう。

hp を 30 減らして表示。

② さらに hp を 2 倍して表示。

③ さらに hp を 5 で割った余りに置き換えて表示。

Python エディタ

コードを実行してください

int と float を混ぜた演算

int と float を混ぜて計算すると、結果は必ず float になります。これは Python が精度の高い方に自動で型を揃える仕組みのためです。

また、前述の通り /(除算)は int 同士でも結果が float//(整数除算)は int 同士なら int になります。

演算結果の型ルール
int + int→ intint + float→ floatint / int→ float(常に)結果昇格例外

int + int = int

ただし / は常に float

片方でも float なら結果は float に揃う。

# int 同士は int
print(10 + 3)        # 13   → int
print(type(10 + 3))  # <class 'int'>

# 片方が float なら結果も float
print(10 + 3.0)         # 13.0
print(type(10 + 3.0))   # <class 'float'>

# / は int 同士でも float
print(10 / 2)           # 5.0
print(type(10 / 2))     # <class 'float'>

# // は int 同士なら int
print(10 // 3)          # 3
print(type(10 // 3))    # <class 'int'>

# // でも片方が float なら float
print(10 // 3.0)        # 3.0
print(type(10 // 3.0))  # <class 'float'>

演算結果の型を予想してから確かめてみましょう。

7 + 2 の結果と型を表示する。

7 + 2.0 の結果と型を表示する。

10 / 5 の結果と型を表示する(割り切れても float になることに注目)。

Python エディタ

コードを実行してください

float の精度には限界がある

コンピュータは float を2進数の近似値として保持しています。そのため、人間から見ると単純な計算でもわずかな誤差が出ることがあります。

以下の例は有名な「float あるある」で、入門者が必ずどこかでハマるポイントです。

float の誤差が生まれる仕組み
0.1(10進で書いた数)0.00011001100...(2進で循環)有限桁で打ち切り≒ 0.1 の近似値0.1 + 0.2近似値どうしで計算0.30000000000000004(誤差あり)2進に変換保存実行結果

誤差が出ることを実際に体感してみましょう。

0.1 + 0.2 を表示する(0.3 にならないことを確認)。

0.1 + 0.1 + 0.1 を表示する。

0.1 + 0.2 == 0.3 を表示する(True にならない)。

Python エディタ

コードを実行してください

厳密な計算が必要なら Decimal

金額計算などわずかな誤差も許されない場面では、標準ライブラリの Decimal 型を使うと正確な小数計算ができます。本記事では扱いませんが、「float は近似値」「厳密な計算には別の道具がある」とだけ覚えておきましょう。

int() と float() で型を切り替える

数値どうしの型変換には組み込み関数 int()float() を使います。

注意したいのは int() は小数点以下を「切り捨て」することです。四捨五入ではないため、3.9int() に渡すと 4 ではなく 3 になります。マイナスの場合は 0 に近い側へ寄せられるので、-3.9-4 ではなく -3 になります。

int() と float() の変換
3.9floatint()切り捨て3int5intfloat().0付加5.0float渡す結果渡す結果
# float → int は「切り捨て」(四捨五入ではない!)
print(int(3.9))     # 3
print(int(3.1))     # 3
print(int(-3.9))    # -3   (0 に近い側へ)

# int → float は .0 が付くだけ
print(float(5))     # 5.0
print(float(-2))    # -2.0

# 型変換を変数に入れて使うパターン
a = 3.9
a = int(a)
print(a, type(a))       # 3 <class 'int'>

b = 5
b = float(b)
print(b, type(b))       # 5.0 <class 'float'>

int() の挙動を確かめてみましょう。

int(7.8) の結果を表示する(四捨五入されない)。

int(-7.8) の結果を表示する(マイナス側でどう寄るか確認)。

float(10) の結果と型を表示する。

Python エディタ

コードを実行してください

この記事では、次の内容を学びました。

  • int と float の違い
  • べき乗 「**」 と複合代入(+= など)
  • 除算 「/」 と整数除算 「//」 の戻り型の違い
  • float の精度問題
  • int() / float() による型変換
QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1次のコードの実行結果はどれですか?
print(type(10 / 2))

Q2次のコードの実行結果はどれですか?
x = 10
x **= 3
print(x)`

Q3次のコードの実行結果はどれですか?
print(int(-3.9))