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

【PHP8.x】RoundingMode::NegativeInfinity定数の使い方

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

作成日: 更新日:

基本的な使い方

NegativeInfinity定数は、PHPのRoundingModeクラスに定義された定数であり、数値の丸め処理において「負の無限大方向への丸め」を指定するために使用されます。この丸めモードを選択すると、常に数値を負の無限大方向へ切り捨てる動作を行います。

具体的には、正の数に適用された場合は、元の数値以下の最大の整数に丸められます。例えば、3.143に、0.990になります。一方、負の数に適用された場合は、元の数値以下の最小の整数に丸められ、絶対値が大きくなる方向に切り捨てられます。例えば、-3.14-4に、-0.5-1になります。これは、数学的な床関数(floor関数)と同様の挙動です。

主に、intl拡張の一部であるNumberFormatterクラスのsetRoundingMode()メソッドなど、数値を特定の形式にフォーマットする際に、どの規則で丸めるかを指定するために利用されます。財務計算や統計処理のように、数値の丸め処理の規則が厳密に定められているシステム開発において、意図した通りの正確な数値結果を得るために非常に重要な定数です。他の丸めモード(例えば、PositiveInfinityHalfUpなど)と適切に使い分けることで、多様な数値処理の要件に対応し、プログラムの信頼性を向上させることができます。

構文(syntax)

1$roundingMode = RoundingMode::NegativeInfinity;

引数(parameters)

引数なし

引数はありません

戻り値(return)

RoundingMode

RoundingMode::NegativeInfinity は、数値の丸め処理における、負の無限大を表す RoundingMode の定数です。

サンプルコード

PHP 8 RoundingMode::NegativeInfinityで丸める

1<?php
2
3// システムエンジニアを目指す初心者向けに、PHP 8で導入された
4// RoundingMode::NegativeInfinity 定数の使用例を示します。
5// この定数は、数値を特定のルールで丸める(フォーマットする)際に使われます。
6// RoundingMode::NegativeInfinity は、数値を常に「負の無限大方向(より小さい整数)」へ丸めます。
7// 例えば、2.1は2へ、-2.1は-3へ丸められます。
8
9// この機能は、PHPの国際化拡張(intl extension)の一部である NumberFormatter クラスで利用されます。
10// このサンプルコードを実行するには、PHPの設定ファイル(php.ini)で 'intl' 拡張を有効にする必要があります。
11// 通常、'extension=intl' の行のコメント(;)を外すことで有効にできます。
12
13// NumberFormatter クラスをインスタンス化します。
14// 'en_US' はロケール(言語と地域)を示し、NumberFormatter::DECIMAL は数値を10進数として扱います。
15$formatter = new NumberFormatter('en_US', NumberFormatter::DECIMAL);
16
17// NumberFormatter の丸めモードを RoundingMode::NegativeInfinity に設定します。
18// これにより、フォーマットされる数値は全てこのルールに従って丸められます。
19$formatter->setRoundingMode(RoundingMode::NegativeInfinity);
20
21// フォーマットされる数値の小数点以下の最大桁数を0に設定します。
22// これにより、数値は整数に丸められて表示されます。
23$formatter->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 0);
24
25echo "RoundingMode::NegativeInfinity を使った丸め処理の例:\n";
26echo "--------------------------------------------------\n";
27
28// 正の数を丸める例: 小数点以下は常に切り捨てられ、元の数値より小さい整数になります。
29$value1 = 2.1;
30$roundedValue1 = $formatter->format($value1);
31echo "  数値: {$value1} -> 丸め後: {$roundedValue1}\n"; // 2.1 は 2 に丸められます
32
33$value2 = 2.9;
34$roundedValue2 = $formatter->format($value2);
35echo "  数値: {$value2} -> 丸め後: {$roundedValue2}\n"; // 2.9 も 2 に丸められます
36
37echo "\n";
38
39// 負の数を丸める例: 小数点以下がある場合、絶対値が増加する方向(より負の方向)に丸められます。
40$value3 = -2.1;
41$roundedValue3 = $formatter->format($value3);
42echo "  数値: {$value3} -> 丸め後: {$roundedValue3}\n"; // -2.1 は -3 に丸められます
43
44$value4 = -2.9;
45$roundedValue4 = $formatter->format($value4);
46echo "  数値: {$value4} -> 丸め後: {$roundedValue4}\n"; // -2.9 も -3 に丸められます
47
48echo "\n";
49
50// ゼロに近い負の数を丸める例: 小数点以下があると、-1 に丸められます。
51$value5 = -0.1;
52$roundedValue5 = $formatter->format($value5);
53echo "  数値: {$value5} -> 丸め後: {$roundedValue5}\n"; // -0.1 は -1 に丸められます
54
55// 整数を丸める例: 小数部分がないため、値は変化しません。
56$value6 = 5.0;
57$roundedValue6 = $formatter->format($value6);
58echo "  数値: {$value6} -> 丸め後: {$roundedValue6}\n"; // 5.0 は 5 のままです
59
60$value7 = -5.0;
61$roundedValue7 = $formatter->format($value7);
62echo "  数値: {$value7} -> 丸め後: {$roundedValue7}\n"; // -5.0 は -5 のままです
63
64?>

PHP 8で導入されたRoundingMode::NegativeInfinityは、数値を丸める(フォーマットする)際のルールを指定するための定数です。この定数は、数値を常に「負の無限大方向」、つまり現在値より小さい整数へ丸めることを意味します。例えば、2.1は2へ、2.9も2へ丸められ、-2.1は-3へ、-2.9も-3へ丸められます。

この機能は、PHPの国際化拡張(intl extension)に含まれるNumberFormatterクラスで使用されます。NumberFormatterは、数値の表示形式を地域や言語に合わせて調整するためのクラスで、その中に丸め処理の機能があります。この定数をNumberFormattersetRoundingModeメソッドの引数として渡すことで、丸め処理の挙動をNegativeInfinityに設定できます。サンプルコードを実行するには、PHPの設定ファイル(php.ini)でintl拡張を有効にする必要があります。

サンプルコードでは、まずNumberFormatterのインスタンスを作成し、setRoundingModeメソッドでRoundingMode::NegativeInfinityを設定しています。これにより、以降の数値フォーマットは全てこの丸めルールに従います。また、setAttributeメソッドでMAX_FRACTION_DIGITSを0に設定し、常に整数に丸められるようにしています。正の数では小数点以下が切り捨てられ、元の値より小さくなるのに対し、負の数では絶対値が増加する方向、つまりより負の方向へ丸められる様子が確認できます。RoundingMode::NegativeInfinityは、丸め処理の具体的な振る舞いを決定する「ルール」として機能します。

このサンプルコードを実行するには、PHPのintl拡張をphp.iniで有効にする必要があります。RoundingMode::NegativeInfinityは、数値を常に負の無限大方向、つまり「より小さい整数」へ丸める特殊なルールです。正の数は小数点以下を切り捨て、負の数は絶対値が増える方向(例: -2.1は-3へ)に丸められるため、一般的な四捨五入や切り上げとは結果が異なる点に注意してください。この定数はNumberFormatterクラスのメソッドと組み合わせて使用し、MAX_FRACTION_DIGITS属性で小数点以下の桁数を適切に設定することで期待通りの丸めが適用されます。PHP 8以降で利用できる機能です。

PHP RoundingMode::NegativeInfinity で負の無限大へ丸める

1<?php
2
3/**
4 * 数値を負の無限大方向へ丸める関数。
5 * RoundingMode::NegativeInfinity を使用して、指定された数値を常に負の無限大方向(より小さい整数)に丸めます。
6 *
7 * @param float $number 丸める対象の数値。
8 * @return int 丸められた整数値。
9 */
10function roundNumberTowardsNegativeInfinity(float $number): int
11{
12    // PHP 8以降で利用可能な RoundingMode::NegativeInfinity は、
13    // 数値を常に負の無限大方向、つまりより小さい整数に丸めます。
14    // 例: 3.7 は 3 に、-3.2 は -4 に丸められます。
15    return round($number, 0, RoundingMode::NegativeInfinity);
16}
17
18// --- サンプル使用例 ---
19// RoundingMode::NegativeInfinity を使用した丸め処理の挙動を確認します。
20// 特に負の数の丸め方に注目してください。
21$testNumbers = [
22    3.7,    // 正の小数
23    3.2,    // 正の小数
24    3.5,    // 正の小数(中間点)
25    -3.7,   // 負の小数
26    -3.2,   // 負の小数
27    -3.5,   // 負の小数(中間点)
28    0.5,    // ゼロに近い正の小数
29    -0.5    // ゼロに近い負の小数
30];
31
32echo "Rounding numbers towards negative infinity using RoundingMode::NegativeInfinity:\n";
33
34foreach ($testNumbers as $number) {
35    $roundedValue = roundNumberTowardsNegativeInfinity($number);
36    echo "Original: " . $number . ", Rounded: " . $roundedValue . "\n";
37}

PHP 8で導入されたRoundingMode::NegativeInfinityは、数値を常に負の無限大方向、つまりより小さい整数へと丸めるための定数です。このサンプルコードでは、この定数を使って数値を丸めるroundNumberTowardsNegativeInfinity関数を定義しています。

この関数は、丸める対象の数値としてfloat $numberを受け取ります。内部では、round()関数の第3引数にRoundingMode::NegativeInfinityを指定することで、与えられた数値を常に負の無限大方向(より小さい整数)へ丸めたint型の整数値を返します。例えば、3.73に、3.23に丸められます。負の数の場合、-3.7-4に、-3.2-4に丸められ、元の数値以下の最も近い整数が結果となります。小数点以下が.5の場合でも、正の数はより小さい整数へ、負の数はさらに小さい整数へと丸められます。

サンプルコードの実行例では、様々な正と負の小数に対してroundNumberTowardsNegativeInfinity関数を適用し、それぞれの丸め結果を表示しています。これにより、特に負の数の丸め処理におけるRoundingMode::NegativeInfinityの具体的な挙動を理解することができます。

このサンプルコードはPHP 8以降で利用可能なRoundingMode::NegativeInfinityを用いています。この定数を使用すると、数値は常に負の無限大方向、つまり「より小さい整数」に丸められます。特に、正の数(例: 3.7が3)と負の数(例: -3.2が-4)で異なる感覚の丸め方となるため、負の数の挙動には注意が必要です。一般的な四捨五入や単なる切り捨てとは異なる結果となるため、意図通りの計算結果を得るためには、この丸めモードの特性を正確に理解することが重要です。また、関数が整数を返すため、元の数値の小数点以下の情報は失われることを認識してください。常に下限値を取りたいケースなどに適しています。

関連コンテンツ

関連プログラミング言語