Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】floor()関数の使い方

floor関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

floor関数は、与えられた浮動小数点数(小数値)を、その値以下の最大の整数に切り捨てる関数です。この関数は、数値の小数部分を完全に破棄し、整数部分のみを取得したい場合に利用されます。

具体的な動作として、例えばfloor(3.14)を実行すると、3が返されます。同様に、floor(3.99)の場合も、3.99以下の最大の整数である3が戻り値となります。このことから、floor関数は小数部分がいくら大きくても、元の値を超えない範囲で最も大きい整数を返すことがわかります。

PHPでは、この関数の戻り値は整数型ではなく浮動小数点数型(float)である点に注意が必要です。これは、非常に大きな整数値を扱う際に、PHPの標準の整数型(int)が扱える範囲を超える可能性があるため、一貫してfloat型で結果を返す設計となっています。

また、負の数に対する動作も理解しておきましょう。例えば、floor(-3.14)を実行すると、戻り値は-4となります。これは、-3.14以下の最大の整数が-4であるという定義に基づいています。

このように、floor関数は、数値計算において小数部分を確実に切り捨て、整数値として扱いたい場面で非常に役立つ基本的な関数です。PHP 8においても、この挙動は一貫しており、信頼性の高い数値処理を提供します。

構文(syntax)

1floor(123.45);

引数(parameters)

int|float $num

  • int|float $num: 小数点以下を切り捨てる対象の数値 (整数または浮動小数点数)

戻り値(return)

float

与えられた浮動小数点数(float)以下の最も大きい整数を浮動小数点数(float)型で返します。

サンプルコード

PHP floor関数で小数点以下を切り捨てる

1<?php
2
3/**
4 * PHPのfloor関数を使って、数値を小数点以下を切り捨てて整数に丸める例を示します。
5 * floor関数は、常に指定された数値以下の最も近い整数を返します。
6 * 戻り値の型は常にfloatです。
7 */
8function demonstrateFloorFunction(): void
9{
10    echo "--- floor() 関数のデモンストレーション ---" . PHP_EOL;
11
12    // 正の浮動小数点数を切り捨てる例
13    $positiveFloat = 3.14;
14    $result1 = floor($positiveFloat);
15    echo "floor(" . $positiveFloat . ") は " . $result1 . " になります。" . PHP_EOL; // 出力: 3.0
16
17    // 正の浮動小数点数を切り捨てる別の例 (小数点以下が大きい場合)
18    $anotherPositiveFloat = 3.99;
19    $result2 = floor($anotherPositiveFloat);
20    echo "floor(" . $anotherPositiveFloat . ") は " . $result2 . " になります。" . PHP_EOL; // 出力: 3.0
21
22    // 負の浮動小数点数を切り捨てる例 (より小さい整数になることに注意)
23    $negativeFloat = -3.14;
24    $result3 = floor($negativeFloat);
25    echo "floor(" . $negativeFloat . ") は " . $result3 . " になります。" . PHP_EOL; // 出力: -4.0
26
27    // 負の浮動小数点数を切り捨てる別の例
28    $anotherNegativeFloat = -3.99;
29    $result4 = floor($anotherNegativeFloat);
30    echo "floor(" . $anotherNegativeFloat . ") は " . $result4 . " になります。" . PHP_EOL; // 出力: -4.0
31
32    // 整数を与えた場合 (float型で返される)
33    $integerValue = 5;
34    $result5 = floor($integerValue);
35    echo "floor(" . $integerValue . ") は " . $result5 . " になります。" . PHP_EOL; // 出力: 5.0
36
37    echo "--- デモンストレーション終了 ---" . PHP_EOL;
38}
39
40// 関数の実行
41demonstrateFloorFunction();
42
43?>

PHPのfloor関数は、与えられた数値の小数点以下を切り捨てて、その数値以下の最も近い整数を返すために利用されます。引数$numには、整数または浮動小数点数を指定することができます。この関数は、どのような数値が渡された場合でも、戻り値の型は常にfloatとなります。

たとえば、floor(3.14)のように正の浮動小数点数を指定すると、結果は3.0となります。小数点以下がどのような値であっても、常に切り捨てられてより小さい整数になります。

一方で、floor(-3.14)のように負の浮動小数点数を指定した場合は注意が必要です。この場合、結果は-4.0となります。これは、-3.14以下の最も近い整数が-4であるためです。同様に、-3.99の場合も結果は-4.0となります。

引数に5のような整数を与えた場合でも、値は変わらず5.0というfloat型で返されます。サンプルコードでは、これらの具体的な挙動がそれぞれ示されており、floor関数の動作を理解するのに役立ちます。

PHPのfloor関数は、指定された数値以下の最も近い整数を返す機能です。特に注意すべき点は、負の数に適用した場合の挙動です。例えば-3.14floor関数に入れると-4.0が返されます。これは一般的な「小数点以下切り捨て」のイメージとは異なり、数値が「より小さい整数」に丸められるため、初心者が混同しやすいポイントです。また、引数が整数であっても、戻り値の型は常にfloat型となります。例えばfloor(5)5.0として扱われますので、厳密に整数型として利用したい場合は明示的な型キャストが必要です。これらの特性を理解して利用することで、期待通りの計算結果を得られ、安全なコード作成に繋がります。

PHPのfloorとceil関数で数値を丸める

1<?php
2
3/**
4 * floor() および ceil() 関数の使用例を示します。
5 *
6 * floor(): 指定された数値を、元の数値以下の最も近い整数に丸めます(小数点以下を切り捨てます)。
7 * ceil(): 指定された数値を、元の数値以上の最も近い整数に丸めます(小数点以下を切り上げます)。
8 * どちらの関数もfloat型を返します。
9 */
10
11echo "--- floor() 関数の使用例 ---\n";
12
13// 正の浮動小数点数
14$value1 = 123.45;
15echo "元の数値: " . $value1 . ", floor() の結果: " . floor($value1) . "\n"; // 出力: 123
16
17// 負の浮動小数点数 (より小さい整数に丸められるため注意)
18$value2 = -123.45;
19echo "元の数値: " . $value2 . ", floor() の結果: " . floor($value2) . "\n"; // 出力: -124
20
21// 整数 (結果は変わらないが float 型で返される)
22$value3 = 123.0;
23echo "元の数値: " . $value3 . ", floor() の結果: " . floor($value3) . "\n"; // 出力: 123
24
25// ゼロ
26$value4 = 0.0;
27echo "元の数値: " . $value4 . ", floor() の結果: " . floor($value4) . "\n"; // 出力: 0
28
29echo "\n--- ceil() 関数の使用例 ---\n";
30
31// 正の浮動小数点数
32$value5 = 123.45;
33echo "元の数値: " . $value5 . ", ceil() の結果: " . ceil($value5) . "\n"; // 出力: 124
34
35// 負の浮動小数点数 (より大きい整数に丸められるため注意)
36$value6 = -123.45;
37echo "元の数値: " . $value6 . ", ceil() の結果: " . ceil($value6) . "\n"; // 出力: -123
38
39// 整数 (結果は変わらないが float 型で返される)
40$value7 = 123.0;
41echo "元の数値: " . $value7 . ", ceil() の結果: " . ceil($value7) . "\n"; // 出力: 123
42
43// ゼロ
44$value8 = 0.0;
45echo "元の数値: " . $value8 . ", ceil() の結果: " . ceil($value8) . "\n"; // 出力: 0
46
47?>

このPHPコードは、数値の丸め処理を行うfloor()関数とceil()関数の基本的な使い方を示しています。

floor()関数は、引数に与えられたint型またはfloat型の数値を、元の数値以下の最も近い整数に丸めます。これは「小数点以下を切り捨てる」と表現されます。例えば、123.45123.0に、-123.45-124.0となります。負の数では元の数値より小さい整数になるため注意が必要です。戻り値は常にfloat型です。

一方、ceil()関数は、引数に与えられたint型またはfloat型の数値を、元の数値以上の最も近い整数に丸めます。これは「小数点以下を切り上げる」と表現されます。例えば、123.45124.0に、-123.45-123.0となります。負の数でも元の数値以上の整数に丸められる点が特徴です。こちらも戻り値は常にfloat型です。

これらの関数は、数値計算において小数点以下の扱いが重要な場面で活用されます。引数が整数であってもfloat型で結果が返されるため、返り値の型に留意して使用してください。

floor()関数およびceil()関数は、引数が整数値であっても戻り値は常にfloat型となる点に注意が必要です。計算結果を厳密に整数として扱いたい場合は、明示的にint型へキャストしてください。また、負の数を扱う際の丸め方には特に注意が必要です。floor()は元の数値以下の最も近い整数に丸めるため、-123.45-124になります。一方、ceil()は元の数値以上の最も近い整数に丸めるため、-123.45-123となります。正の数とは異なる丸め方をするため、意図しない結果にならないよう、これらの挙動を理解して安全にご利用ください。

PHP floor関数と浮動小数点数誤差の影響

1<?php
2
3/**
4 * 浮動小数点数の計算誤差がPHPのfloor関数の結果に与える影響を示すサンプルコード。
5 *
6 * floor関数自体は仕様通りに動作しますが、浮動小数点数の計算では精度問題により
7 * 微妙な誤差が生じることがあります。この誤差がfloor関数に渡されると、
8 * 期待とは異なる丸め結果となり、これが「バグ」と誤解されることがあります。
9 *
10 * このコードは、典型的な浮動小数点数の加算誤差がfloor関数にどう影響するかを示します。
11 */
12function demonstrateFloorPrecisionIssue(): void
13{
14    // 0.1 と 0.7 を足すと、数学的には 0.8 になります。
15    // しかし、多くの浮動小数点数システムでは、これらの値を正確に表現できないため、
16    // わずかな誤差が生じます。
17    $num1 = 0.1;
18    $num2 = 0.7;
19    $expectedSum = 0.8; // $num1 + $num2 の数学的な期待値
20
21    // 浮動小数点数で実際に計算された結果
22    // この `calculatedSum` は、正確な 0.8 ではなく、
23    // 例えば 0.7999999999999999 といった値になることがあります。
24    $calculatedSum = $num1 + $num2;
25
26    // これらの値をそれぞれ10倍してから floor 関数を適用します。
27    // 期待される結果は floor(0.8 * 10) = floor(8.0) = 8.0 です。
28    $expectedFloorResult = floor($expectedSum * 10);
29
30    // 実際の計算結果に floor 関数を適用します。
31    // もし $calculatedSum が 0.799... となった場合、
32    // $calculatedSum * 10 は 7.999... となり、floor 関数によって 7.0 に丸められます。
33    $actualFloorResult = floor($calculatedSum * 10);
34
35    echo "--- 浮動小数点数の計算誤差がfloor関数の結果に与える影響 ---" . PHP_EOL;
36
37    echo "期待される計算結果 (0.1 + 0.7) = " . sprintf('%.20F', $expectedSum) . PHP_EOL;
38    echo "実際の浮動小数点数計算結果      = " . sprintf('%.20F', $calculatedSum) . PHP_EOL . PHP_EOL;
39
40    echo "期待される floor(0.8 * 10)      = " . $expectedFloorResult . PHP_EOL;
41    echo "実際の floor((0.1 + 0.7) * 10)  = " . $actualFloorResult . PHP_EOL . PHP_EOL;
42
43    // 期待される結果と実際のフロアの結果を比較
44    if ($expectedFloorResult !== $actualFloorResult) {
45        echo "【警告】浮動小数点数の計算誤差により、floor関数の結果が期待と異なります。" . PHP_EOL;
46        echo "これはfloor関数のバグではなく、浮動小数点数の特性に起因するものです。" . PHP_EOL;
47        echo "このような問題を避けるためには、浮動小数点数の比較や丸め処理において" . PHP_EOL;
48        echo "誤差を考慮したアプローチ(例: 特定の桁数での丸め、許容範囲での比較)が必要です。" . PHP_EOL;
49    } else {
50        echo "この環境では、浮動小数点数の計算誤差がfloor関数に影響しませんでした。" . PHP_EOL;
51    }
52}
53
54// 関数を実行して、浮動小数点数の精度問題の影響を確認します。
55demonstrateFloorPrecisionIssue();

PHP 8のfloor関数は、引数として渡された浮動小数点数(float)または整数(int)に対し、小数点以下を切り捨てて、最も近いより小さい整数値をfloat型で返します。例えば、floor(3.14)3.0を、floor(-2.7)-3.0を返します。

このサンプルコードは、floor関数そのものの動作が原因ではなく、浮動小数点数の計算で生じる微細な誤差が、floor関数の結果に予期せぬ影響を与えるケースを示しています。具体的には、0.1と0.7を足した結果は数学的に0.8ですが、コンピュータ内部での浮動小数点数表現の限界により、正確に0.8とならず、例えば0.7999...といったわずかに小さい値になることがあります。このわずかな誤差がある値に対してfloor関数を適用すると、期待する丸め結果(例: floor(0.8 * 10)であれば8.0)とは異なり、一つ下の整数値(例: floor(7.999... * 10)であれば7.0)となることがあります。

これはfloor関数のバグではなく、浮動小数点数演算の特性によるものです。システムエンジニアを目指す方は、このような精度問題を理解し、浮動小数点数を用いた計算や比較を行う際には、誤差を考慮した処理が必要であることを学ぶことができます。

PHPのfloor関数は、小数点以下を切り捨てて整数部を返す関数ですが、浮動小数点数計算の特性には注意が必要です。多くのプログラミング言語では、0.1 + 0.7のような計算が数学的に正確な0.8ではなく、内部的にはわずかな誤差を含む0.7999...のような値として表現されることがあります。この微細な誤差がfloor関数に渡されると、期待する結果(例: floor(0.8 * 10)8.0)とは異なる結果(例: floor(7.999... * 10)7.0)になる場合があります。これはfloor関数のバグではなく、浮動小数点数の精度限界によるものです。厳密な計算や数値比較が必要な場合は、bcmathのような高精度計算ライブラリの利用や、事前に特定の桁数で丸めるなどの対策を検討してください。

PHP floor() で割り算の結果を切り捨てる

1<?php
2
3/**
4 * floor() 関数を使用して、割り算の結果を小数点以下を切り捨てて整数(float型)にする例です。
5 * 特に負の数の扱いにおいて、通常の型キャスト (int) とは異なる挙動を示すため注意が必要です。
6 * floor() は、引数以下の最大の整数を返します。
7 */
8
9// 1. 正の数の割り算
10// 10を3で割ると3.33...になります。floor() はこれを3.0に切り捨てます。
11$numerator1 = 10;
12$denominator1 = 3;
13$divisionResult1 = $numerator1 / $denominator1;
14$floorResult1 = floor($divisionResult1);
15echo "{$numerator1} / {$denominator1} = {$divisionResult1} (floor: {$floorResult1})\n"; // 出力: 10 / 3 = 3.3333333333333 (floor: 3)
16
17// 2. 小数点以下が.5の正の数の割り算
18// 7を2で割ると3.5になります。floor() はこれを3.0に切り捨てます。
19$numerator2 = 7;
20$denominator2 = 2;
21$divisionResult2 = $numerator2 / $denominator2;
22$floorResult2 = floor($divisionResult2);
23echo "{$numerator2} / {$denominator2} = {$divisionResult2} (floor: {$floorResult2})\n"; // 出力: 7 / 2 = 3.5 (floor: 3)
24
25// 3. 負の数の割り算(floor() の重要な挙動)
26// -10を3で割ると-3.33...になります。floor() はこれを-4.0に切り捨てます。
27// (int) 型キャストの場合は -3 になりますが、floor() は「引数以下の最大の整数」を返すため、
28// 数値軸上でより小さい値 (-4) を返します。
29$numerator3 = -10;
30$denominator3 = 3;
31$divisionResult3 = $numerator3 / $denominator3;
32$floorResult3 = floor($divisionResult3);
33echo "{$numerator3} / {$denominator3} = {$divisionResult3} (floor: {$floorResult3})\n"; // 出力: -10 / 3 = -3.3333333333333 (floor: -4)
34
35// 4. 小数点以下が.5の負の数の割り算
36// -7を2で割ると-3.5になります。floor() はこれを-4.0に切り捨てます。
37$numerator4 = -7;
38$denominator4 = 2;
39$divisionResult4 = $numerator4 / $denominator4;
40$floorResult4 = floor($divisionResult4);
41echo "{$numerator4} / {$denominator4} = {$divisionResult4} (floor: {$floorResult4})\n"; // 出力: -7 / 2 = -3.5 (floor: -4)
42
43// 5. 割り算の結果がすでに整数の場合
44// 9を3で割ると3.0になります。floor() はこれを3.0のまま返します。
45$numerator5 = 9;
46$denominator5 = 3;
47$divisionResult5 = $numerator5 / $denominator5;
48$floorResult5 = floor($divisionResult5);
49echo "{$numerator5} / {$denominator5} = {$divisionResult5} (floor: {$floorResult5})\n"; // 出力: 9 / 3 = 3 (floor: 3)
50

PHPのfloor()関数は、与えられた数値の小数点以下を切り捨て、その数値以下の最大の整数をfloat型で返す関数です。主に割り算の結果を整数部分のみにしたい場合などに利用されますが、その戻り値は常にfloat型である点が特徴です。引数には整数または浮動小数点数を指定することができます。

この関数は、正の数に対しては一般的な切り捨てと同じ挙動を示します。例えば、10 / 3の結果である3.33...floor()を適用すると3.0になり、7 / 2の結果である3.53.0になります。

特に注意が必要なのは負の数に対する挙動です。例えば、-10 / 3の結果である-3.33...に対してfloor()を適用すると、-3.33...以下の最大の整数である-4.0が返されます。同様に、-7 / 2の結果である-3.5に適用しても-4.0が返されます。これは、floor()が数値軸上で「引数以下の最大の整数」を探すためであり、通常の(int)型キャストが小数点以下を単純に除去する(例:-3.33...-3にする)のとは異なる結果となるため、この違いを理解しておくことが重要です。割り算の結果がすでに整数である場合は、その整数をfloat型でそのまま返します。

floor()関数は、引数として与えられた数値以下の最大の整数を、float型で返します。特に重要な注意点は、負の数を扱う際の挙動です。例えば-3.3のような値に対して、通常の(int)型キャストでは小数点以下を切り捨てて-3となりますが、floor()は引数以下の最大の整数である-4.0を返します。これは、数値を常にマイナス無限大の方向へ切り捨てるためです。この挙動の違いは、負の値を含む割り算の整数部分を求める際に意図しない結果を招く可能性があるため、負の数を扱う際は特に注意し、ご自身の求める丸め方に合わせて(int)型キャストやPHP 8で追加されたintdiv()関数などの選択肢も検討してください。また、floor()の戻り値は常にfloat型であるため、厳密なint型が必要な場合は追加の型キャストが必要になります。

関連コンテンツ

関連プログラミング言語