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爆速講座