Python math.floor()の完全ガイド:切り下げ関数の使い方を徹底解説
Pythonで数値を切り下げる際に使用されるmath.floor()関数は、データ処理や数値計算において非常に重要な役割を果たします。小数点以下を切り捨てて整数値を取得する基本的な機能から、実際のプログラミングでの応用まで幅広く活用されています。
本記事では、Python初心者から中級者まで理解できるよう、math.floor()の基本的な使い方から実践的な応用例まで詳しく解説します。
math.floor()とは
math.floor()は、引数として与えられた数値以下の最大の整数を返す関数です。つまり、小数点以下を切り下げて整数値にする処理を行います。
基本構文
import math
result = math.floor(数値)
基本的な使い方
正の数の切り下げ
import math
print(math.floor(4.7)) # 4
print(math.floor(4.1)) # 4
print(math.floor(4.9)) # 4
負の数の切り下げ
import math
print(math.floor(-4.1)) # -5
print(math.floor(-4.7)) # -5
print(math.floor(-4.9)) # -5
整数の場合
import math
print(math.floor(5)) # 5
print(math.floor(-3)) # -3
他の切り捨て方法との違い
int()関数との比較
import math
print(f"math.floor(4.7): {math.floor(4.7)}") # 4
print(f"int(4.7): {int(4.7)}") # 4
print(f"math.floor(-4.7): {math.floor(-4.7)}")# -5
print(f"int(-4.7): {int(-4.7)}") # -4
math.ceil()との比較
import math
print(f"floor(4.2): {math.floor(4.2)}") # 4(切り下げ)
print(f"ceil(4.2): {math.ceil(4.2)}") # 5(切り上げ)
math.trunc()との比較
import math
print(f"floor(-4.7): {math.floor(-4.7)}") # -5
print(f"trunc(-4.7): {math.trunc(-4.7)}") # -4(0に向かって切り捨て)
実践的な使用例
ページング処理
import math
total_items = 47
items_per_page = 10
pages = math.floor(total_items / items_per_page) + 1
print(f"必要ページ数: {pages}") # 5
時間計算
import math
seconds = 3725
hours = math.floor(seconds / 3600)
minutes = math.floor((seconds % 3600) / 60)
print(f"{hours}時間{minutes}分") # 1時間2分
価格計算
import math
price = 1234.56
discount_rate = 0.15
discounted = price * (1 - discount_rate)
final_price = math.floor(discounted)
print(f"割引後価格: {final_price}円") # 1049円
データ処理での活用
リストの要素処理
import math
prices = [99.9, 199.7, 299.3, 399.8]
floor_prices = [math.floor(price) for price in prices]
print(floor_prices) # [99, 199, 299, 399]
統計データの処理
import math
scores = [85.6, 92.3, 78.9, 88.1]
floor_scores = list(map(math.floor, scores))
print(f"切り下げ後: {floor_scores}") # [85, 92, 78, 88]
データビニング(区間分割)
import math
def create_bins(value, bin_size):
return math.floor(value / bin_size) * bin_size
ages = [23, 35, 47, 52, 68]
age_bins = [create_bins(age, 10) for age in ages]
print(age_bins) # [20, 30, 40, 50, 60]
数学的応用
座標の格子点計算
import math
def snap_to_grid(x, y, grid_size):
grid_x = math.floor(x / grid_size) * grid_size
grid_y = math.floor(y / grid_size) * grid_size
return grid_x, grid_y
result = snap_to_grid(23.7, 45.2, 10)
print(result) # (20, 40)
確率計算
import math
success_rate = 0.847
percentage = math.floor(success_rate * 100)
print(f"成功率: {percentage}%") # 84%
エラーハンドリング
TypeError の対処
import math
try:
result = math.floor("3.14") # エラー発生
except TypeError as e:
print("数値以外は処理できません")
特殊値の処理
import math
print(math.floor(math.inf)) # OverflowError
print(math.floor(-math.inf)) # OverflowError
print(math.isnan(math.floor(float('nan')))) # True
パフォーマンスの考慮
大量データ処理
import math
import time
# math.floor()を使用
data = [i + 0.7 for i in range(100000)]
start = time.time()
result1 = [math.floor(x) for x in data]
time1 = time.time() - start
NumPyとの比較
import math
import numpy as np
# 小規模データ: math.floor()が効率的
small_data = [3.7, 4.2, 5.9]
result = [math.floor(x) for x in small_data]
# 大規模データ: NumPyが効率的
large_data = np.array([3.7, 4.2, 5.9] * 1000)
result = np.floor(large_data)
よくある使用パターン
桁数の調整
import math
def floor_to_decimal(value, decimals):
multiplier = 10 ** decimals
return math.floor(value * multiplier) / multiplier
result = floor_to_decimal(3.14159, 2)
print(result) # 3.14
インデックス計算
import math
def get_page_items(items, page, per_page):
start_index = page * per_page
end_index = min(start_index + per_page, len(items))
page_count = math.floor(len(items) / per_page) + 1
return items[start_index:end_index], page_count
範囲チェック
import math
def is_in_range(value, min_val, max_val):
floored_value = math.floor(value)
return min_val <= floored_value <= max_val
result = is_in_range(5.8, 1, 10)
print(result) # True
実際のプロジェクトでの活用
ゲーム開発
import math
def calculate_level(experience):
return math.floor(experience / 1000) + 1
player_exp = 2750
level = calculate_level(player_exp)
print(f"プレイヤーレベル: {level}") # 3
金融計算
import math
def calculate_installment(principal, rate, periods):
monthly_payment = principal * rate / (1 - (1 + rate) ** -periods)
return math.floor(monthly_payment)
payment = calculate_installment(1000000, 0.005, 60)
print(f"月々の支払い: {payment}円")
デバッグとテスト
単体テストの例
import math
import unittest
class TestMathFloor(unittest.TestCase):
def test_positive_numbers(self):
self.assertEqual(math.floor(4.7), 4)
def test_negative_numbers(self):
self.assertEqual(math.floor(-4.7), -5)
まとめ
math.floor()は、Pythonで数値を切り下げる際の標準的な関数です。単純な小数点切り捨てから、データ処理、ページング、座標計算まで幅広い用途で活用できます。
重要なポイント:
- 負の数では期待と異なる結果になる場合がある
- int()関数とは動作が異なる
- 大量データ処理ではNumPyとの使い分けを検討
- エラーハンドリングを適切に実装
本記事で紹介した様々な使用例を参考に、実際のプロジェクトでmath.floor()を効果的に活用してください。データ処理や数値計算において、より正確で効率的なプログラムを作成できるでしょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座

