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

【Python】割り算で切り上げをして整数にする方法!切り捨て除算を使った切り上げテクニックも紹介

【Python】割り算で切り上げをして整数にする方法!切り捨て除算を使った切り上げテクニックも紹介 Python

Pythonで数値計算を行っている際、「割り算の結果を切り上げして整数にしたい」という場面は頻繁に訪れます。
ページネーションのページ数計算や、商品の梱包数計算など、実務でも必須の処理です。

しかし、Pythonの標準的な割り算演算子 / は小数を返し、切り捨て除算 // は切り捨てを行ってしまうため、「切り上げ」には少し工夫が必要です。

この記事では、Pythonで割り算の切り上げを行うための基本である math.ceil() 関数の使い方から、標準ライブラリを使わない演算子だけのテクニック、さらには小数点以下の桁数を指定した切り上げ方法までを詳しく解説します。

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

基本:math.ceil()関数を使って切り上げを行う

最も一般的で読みやすい方法は、標準ライブラリである math モジュールの ceil() 関数を使用することです。

「ceil(シーリング)」は「天井」を意味し、数値を正の無限大方向に丸めます。

ここでは基本的な使い方と、戻り値の型について解説します。

math.ceil() の基本的な使い方

使い方は非常にシンプルです。
割り算の結果を math.ceil() の引数に渡すだけです。

import math

# 10 ÷ 3 = 3.33... -> 4 に切り上げ
val1 = 10 / 3
result1 = math.ceil(val1)

# 10 ÷ 5 = 2.0 -> 2 のまま
val2 = 10 / 5
result2 = math.ceil(val2)

# 結果の表示
print(f"10/3 の切り上げ: {result1} (型: {type(result1)})")
print(f"10/5 の切り上げ: {result2} (型: {type(result2)})")

実行結果

10/3 の切り上げ: 4 (型: <class 'int'>)
10/5 の切り上げ: 2 (型: <class 'int'>)

このソースコードでは、まず import math でモジュールを読み込んでいます。

math.ceil(10 / 3) を実行すると、計算結果である 3.33... が切り上げられ、整数の 4 が返されます。

注目すべき点は、戻り値が int 型(整数)であるということです。
これにより、そのままリストのインデックスや回数指定などに利用できるため、非常に便利です。

インポート不要!演算子だけで整数の切り上げを行うテクニック

math モジュールをインポートせずに、演算子だけで切り上げを実現する方法もあります。

これは「負の数の切り捨て除算」の性質を利用したテクニックで、コードを短く書きたい場合や、競プロ(競技プログラミング)などでよく使われます。

マイナスと切り捨て除算「//」を組み合わせる

Pythonの切り捨て除算演算子 // は、「小さい方の整数」へ丸める性質があります。

これを利用し、割られる数と割る数にマイナスをつけて計算し、最後に符号を反転させることで切り上げと同じ結果が得られます。

a = 10
b = 3

# 通常の切り捨て除算
print(f"通常の切り捨て (10 // 3): {a // b}")

# 演算子テクニックを使った切り上げ
# -(-a // b) という書き方が一般的です
ceil_result = -(-a // b)

print(f"テクニックでの切り上げ: {ceil_result}")

実行結果

通常の切り捨て (10 // 3): 3
テクニックでの切り上げ: 4

このコードの仕組みを詳しく解説します。

10 // 33 ですが、-10 // 3 を計算すると、答えは -3.33... より小さい整数の -4 になります。

この結果 -4 にさらにマイナスをつける(-(-4))ことで、正の数の 4 に戻ります。
結果として、「10 ÷ 3 の切り上げ」と同じ値が得られるわけです。

import 文を書きたくない場合に非常に有効な手段となります。

小数点以下の桁数を指定して切り上げする方法

「小数点第二位を切り上げて、第一位まで表示したい」といったケースもあります。

math.ceil() は整数への切り上げしか行わないため、桁数を指定したい場合は計算を工夫するか、decimal モジュールを使用します。

計算式で桁数を調整する

数値を10倍、100倍してから切り上げを行い、その後元の倍率で割るという方法です。

import math

val = 3.14159

# 小数点第一位で切り上げ(結果を整数にしたい場合など)
# 3.14... -> 31.4... -> 32 -> 3.2 ではない点に注意
# ここでは「小数点第二位を切り上げて第一位を残す」例とします

# 10倍して切り上げてから10で割る
result_1 = math.ceil(val * 10) / 10

print(f"小数点第二位で切り上げ: {result_1}")

実行結果

小数点第二位で切り上げ: 3.2

この処理では、まず 3.14159 を10倍して 31.4159 にします。

これを math.ceil で切り上げると 32 になります。
最後に10で割ることで 3.2 を得ています。

浮動小数点数の計算誤差が出る可能性があるため、厳密な計算が必要な場合は次の decimal モジュールを推奨します。

decimalモジュールで正確に桁指定を行う

お金の計算など、誤差が許されない場面では標準ライブラリの decimal を使います。

from decimal import Decimal, ROUND_CEILING

val = Decimal("3.14159")

# 0.1 (10^-1) の位まで残して切り上げ
result = val.quantize(Decimal("0.1"), rounding=ROUND_CEILING)

print(f"Decimalでの切り上げ: {result}")

実行結果

Decimalでの切り上げ: 3.2

Decimal 型の数値に対して quantize メソッドを使用します。

第一引数に「どの桁まで残すか(例: “0.1”)」を指定し、rounding オプションに ROUND_CEILING(正の無限大への丸め)を指定することで、任意の桁での正確な切り上げが可能になります。

1の位や10の位など整数部での切り上げ

消費税計算などで、「1の位を切り上げて10円単位にする」といった処理が必要な場合も、考え方は桁数指定と同じです。

整数の桁を指定して切り上げる

import math

price = 1234 # 1234円

# 1の位を切り上げて10の位までにする
# -1乗(1/10倍)して切り上げてから10倍する
result_10 = math.ceil(price * 0.1) * 10

# 10の位を切り上げて100の位までにする
result_100 = math.ceil(price * 0.01) * 100

print(f"10円単位に切り上げ: {result_10}")
print(f"100円単位に切り上げ: {result_100}")

実行結果

10円単位に切り上げ: 1240
100円単位に切り上げ: 1300

ここでは 0.10.01 を掛けることで小数点を左にずらし、math.ceil で整数に切り上げた後、再び 10100 を掛けて元の位に戻しています。

1234123.4 →(切り上げ)→ 124 →(10倍)→ 1240 という流れです。

関連知識:切り捨て・四捨五入との違い

最後に、切り上げとセットで使われる「切り捨て」「四捨五入」についても簡単に整理しておきましょう。

  • 切り上げ: math.ceil(x) または -(-a // b)
  • 切り捨て: math.floor(x) または int(x)// 演算子
  • 四捨五入: round(x)

特に int() 関数を使った場合、正の数では切り捨て(0方向への丸め)となりますが、負の数では挙動が math.floor() と異なる場合があるため注意が必要です。

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

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

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

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

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

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

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

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