記事内にはプロモーションが含まれています

Pythonで割り算の結果を整数にする方法!切り捨て・切り上げ・余りの計算を徹底解説

Pythonで割り算の結果を整数にする方法!切り捨て・切り上げ・余りの計算を徹底解説 Python

Pythonで計算処理を行っていると、割り算の結果が予想と異なり戸惑うことがあります。
例えば、「10割る2」を計算したときに、整数の「5」ではなく小数の「5.0」が返ってきてしまい、型エラーの原因になるケースです。

他のプログラミング言語経験者や初心者が特につまずきやすいのが、このPython特有の割り算の仕様です。

しかし、適切な演算子や関数を知っていれば、整数のみを取得したり、切り上げや四捨五入を行ったりすることは非常に簡単です。

この記事では、Pythonで割り算の結果を整数で取得するための基本的な方法から、商と余りの同時取得、負の数を扱う際の注意点まで、最新環境に合わせて徹底的に解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

Pythonにおける2種類の割り算演算子

Pythonには割り算を行うために、スラッシュ1つの「/」と、スラッシュ2つの「//」という異なる演算子が用意されています。

これらを使い分けることが、整数を取得するための第一歩です。

通常の割り算「/」は常にfloat型(小数)を返す

Python 3以降の仕様では、通常の割り算演算子「/」を使うと、割り切れる計算であっても結果は必ず浮動小数点数(float型)になります。

# 通常の割り算
result_1 = 10 / 2
result_2 = 10 / 3

print(f"10 / 2 の結果: {result_1} (型: {type(result_1)})")
print(f"10 / 3 の結果: {result_2} (型: {type(result_2)})")

実行結果は以下の通りです。

10 / 2 の結果: 5.0 (型: <class 'float'>)
10 / 3 の結果: 3.3333333333333335 (型: <class 'float'>)

このように、答えが割り切れる「5」であっても、Pythonは「5.0」という小数の形式で結果を返します。
リストのインデックス操作などで整数が必要な場合、このままではエラーになってしまいます。

切り捨て除算「//」で整数(int型)を取得する

割り算の結果を整数で得たい場合に最も推奨されるのが、切り捨て除算演算子「//」です。
これを使えば、小数点以下を切り捨てた整数部分(商)のみを取得でき、結果の型も整数(int型)となります。

# 切り捨て除算
result_int_1 = 10 // 2
result_int_2 = 10 // 3

print(f"10 // 2 の結果: {result_int_1} (型: {type(result_int_1)})")
print(f"10 // 3 の結果: {result_int_2} (型: {type(result_int_2)})")

実行結果は以下の通りです。

10 // 2 の結果: 5 (型: <class 'int'>)
10 // 3 の結果: 3 (型: <class 'int'>)

この「//」演算子を使う方法が、Pythonで整数の商を求める最も基本的かつ高速な手段です。
単に整数部分だけが欲しい場合は、後述するint()関数での変換よりもこちらを使うと良いでしょう。

割り算の「商」と「余り」を計算する方法

整数同士の割り算では、商(割り算の答えの整数部分)だけでなく、「余り」を知りたい場面も多々あります。

Pythonでは余りを求めるための専用の演算子や、商と余りを一度に計算する便利な関数が用意されています。

「%」演算子で余り(剰余)を求める

余りを求めたい場合は、パーセント記号「%」を使用します。
これはモジュロ演算子とも呼ばれます。

num_a = 10
num_b = 3

# 商を求める
quotient = num_a // num_b

# 余りを求める
remainder = num_a % num_b

print(f"{num_a} ÷ {num_b} = {quotient} あまり {remainder}")

実行結果は以下の通りです。

10 ÷ 3 = 3 あまり 1

偶数か奇数かを判定する際(2で割った余りが0か1か)や、一定の周期で処理を繰り返す際などに頻繁に使用されます。

divmod関数で商と余りをまとめて取得

商と余りの両方が必要な場合、それぞれ計算するよりも「divmod()」という組み込み関数を使うのが効率的です。

この関数は、(商, 余り) というタプルを返します。

num_a = 14
num_b = 4

# divmod関数を使用
result = divmod(num_a, num_b)

print(f"戻り値: {result}")
print(f"商: {result[0]}, 余り: {result[1]}")

# アンパック代入を使うと便利です
q, r = divmod(num_a, num_b)
print(f"商(q): {q}, 余り(r): {r}")

実行結果は以下の通りです。

戻り値: (3, 2)
商: 3, 余り: 2
商(q): 3, 余り(r): 2

計算処理が一度で済むため、コードもすっきりと読みやすくなります。
秒数を「分と秒」に変換するような処理には最適です。

整数への丸め処理(切り捨て・切り上げ・四捨五入)

「//」演算子は結果を「切り捨て(床関数)」て整数にしますが、状況によっては「切り上げ」や「四捨五入」をして整数にしたいこともあります。

その場合は標準ライブラリなどを活用します。

int()関数による切り捨て(0方向への丸め)

通常の割り算「/」の結果を int() 関数でキャスト(型変換)することでも整数化できます。
正の数の場合は「//」と同じ結果になりますが、単に小数点以下を削除する挙動となります。

val = 10 / 3
int_val = int(val)

print(f"元の値: {val}")
print(f"int()変換後: {int_val}")

実行結果は以下の通りです。

元の値: 3.3333333333333335
int()変換後: 3

math.ceil()関数による切り上げ

割り算の結果を整数に切り上げたい場合(例:5.1なら6にする)は、math モジュールの ceil() 関数を使用します。

ページネーションのページ数計算などで必須のテクニックです。

import math

# 10 ÷ 3 = 3.33... -> 4 に切り上げたい
val_1 = 10 / 3
ceil_val_1 = math.ceil(val_1)

# 10 ÷ 2 = 5.0 -> 5 のまま
val_2 = 10 / 2
ceil_val_2 = math.ceil(val_2)

print(f"10/3 の切り上げ: {ceil_val_1}")
print(f"10/2 の切り上げ: {ceil_val_2}")

実行結果は以下の通りです。

10/3 の切り上げ: 4
10/2 の切り上げ: 5

round()関数による四捨五入

四捨五入して整数にしたい場合は、組み込み関数の round() を使います。

ただし、Pythonの round() は「偶数への丸め(銀行家の丸め)」と呼ばれる方式を採用しているため、0.5の処理に注意が必要です。

# 通常の四捨五入のように見える例
print(f"3.4 -> {round(3.4)}")
print(f"3.6 -> {round(3.6)}")

# 注意が必要な .5 のケース
# 偶数側に丸められるため、0.5は0に、1.5は2になります
print(f"0.5 -> {round(0.5)}")
print(f"1.5 -> {round(1.5)}")
print(f"2.5 -> {round(2.5)}")

実行結果は以下の通りです。

3.4 -> 3
3.6 -> 4
0.5 -> 0
1.5 -> 2
2.5 -> 2

厳密な四捨五入が必要な場合は、decimal モジュールを使用することをおすすめします。

負の数(マイナス)の割り算における注意点

Pythonで負の数を割り算する場合、「//」演算子と int() 関数では結果が異なることがあります。
これは「切り捨て」の定義が異なるために起こる現象です。

「//」と「int()」の違い

  • // 演算子: 「負の無限大」に向かって切り捨てます(より小さい整数になる)。
  • int() 関数: 「0」に向かって切り捨てます(単に小数点以下を削除)。
num = -10
div = 3

# -10 / 3 は -3.333...

# // 演算子の場合
# -3.333... より小さい最大の整数は -4
floor_div = num // div

# int() キャストの場合
# -3.333... の小数点以下を削除して -3
int_cast = int(num / div)

print(f"// 演算子: {floor_div}")
print(f"int()変換: {int_cast}")

実行結果は以下の通りです。

// 演算子: -4
int()変換: -3

数学的な「ガウス記号」や床関数の挙動としては // が正しいですが、C言語などの挙動(0方向への切り捨て)を期待している場合は int() を使う必要があります。
用途に応じて使い分けましょう。

Pythonのスキルを活かして年収を上げる方法

以上、Pythonで割り算の結果を整数にする方法について解説してきました。

なお、Pythonのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPythonの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。