PHPでよく使われる数学関数の一つであるfloor()
関数について、基本から応用まで詳しく解説します。
floor関数の基本
floor()
関数は、指定された数値を切り捨てて、その数値以下の最大の整数を返します。つまり、小数点以下を切り捨てる関数です。
基本構文
float floor ( float $number )
基本的な使用例
<?php
echo floor(4.3); // 出力: 4
echo floor(9.999); // 出力: 9
echo floor(-3.14); // 出力: -4(注意: 負の数では小さい方向に切り捨て)
負の数の場合は、切り捨ては小さい方向(数直線上で左方向)に行われるため、結果は常に引数以下の最大の整数になります。
実践的な使用例
例1: 価格計算での使用
<?php
$price = 1256.78;
$discount_price = $price * 0.85; // 15%オフ
echo "元の価格: " . number_format($price, 2) . "円\n";
echo "割引価格(切り捨てなし): " . number_format($discount_price, 2) . "円\n";
echo "割引価格(切り捨て): " . number_format(floor($discount_price), 2) . "円\n";
出力:
元の価格: 1,256.78円
割引価格(切り捨てなし): 1,068.26円
割引価格(切り捨て): 1,068.00円
例2: ページネーションでの使用
<?php
$total_items = 57;
$items_per_page = 10;
$total_pages = floor($total_items / $items_per_page) + 1;
echo "アイテム総数: $total_items\n";
echo "1ページあたりのアイテム数: $items_per_page\n";
echo "合計ページ数: $total_pages";
出力:
アイテム総数: 57
1ページあたりのアイテム数: 10
合計ページ数: 6
他の関連関数との比較
ceil()との比較(切り上げ)
<?php
$number = 4.3;
echo "元の数値: $number\n";
echo "floor()結果: " . floor($number) . "\n"; // 4
echo "ceil()結果: " . ceil($number); // 5
round()との比較(四捨五入)
<?php
$numbers = [2.3, 2.5, 2.7, -2.3, -2.5, -2.7];
foreach ($numbers as $number) {
echo "数値: $number\n";
echo " floor(): " . floor($number) . "\n";
echo " round(): " . round($number) . "\n";
echo " ceil(): " . ceil($number) . "\n\n";
}
特殊なケースと注意点
浮動小数点の精度問題
<?php
$calculation = 10.1 + 0.7;
echo "計算結果: $calculation\n"; // 10.8 に近い値
echo "floor()結果: " . floor($calculation); // 通常は10
// より安全な方法
$calculation = 10.1 + 0.7;
$calculation = round($calculation, 10); // 小数点以下を適切な桁数で丸める
echo "丸めた計算結果: $calculation\n";
echo "floor()結果: " . floor($calculation);
大きな数値の取り扱い
<?php
$big_number = 1234567890123.456789;
echo "大きな数値: $big_number\n";
echo "floor()結果: " . floor($big_number);
// 精度が必要な場合はBCMath関数を使用する
if (function_exists('bcfloor')) {
echo "bcfloor()結果: " . bcfloor($big_number);
} else {
// BCMathでfloorを模倣
echo "BCMath floor結果: " . bcsub($big_number, bcmod($big_number, 1), 0);
}
実践的なユースケース
例3: 割引計算の完全版
<?php
function calculate_discount($price, $discount_percent, $min_price = null) {
$discount_price = $price * (1 - $discount_percent / 100);
$discount_price = floor($discount_price);
// 最低価格が設定されている場合はチェック
if ($min_price !== null && $discount_price < $min_price) {
return $min_price;
}
return $discount_price;
}
$products = [
['name' => 'ノートPC', 'price' => 89800],
['name' => 'スマートフォン', 'price' => 65000],
['name' => 'イヤホン', 'price' => 12800]
];
foreach ($products as $product) {
$original = $product['price'];
$sale_price = calculate_discount($original, 15, 10000);
echo "{$product['name']} の価格:\n";
echo " 通常価格: " . number_format($original) . "円\n";
echo " セール価格: " . number_format($sale_price) . "円\n";
echo " 割引額: " . number_format($original - $sale_price) . "円\n\n";
}
まとめ
floor()
関数は、PHP開発において以下のような場面で特に役立ちます:
- 価格計算(消費者にとって有利な切り捨て)
- ページネーション計算
- 数学的計算での整数部分の抽出
- 切り捨てが必要な統計計算
使用する際は、特に浮動小数点の精度問題や負の数の挙動に注意して、適切なコンテキストで利用することが重要です。