整数
int は、ℤ = {..., -2, -1, 0, 1, 2, ...}
という集合です。
&reftitle.seealso;
浮動小数点数
任意精度整数 / BCMath
任意精度整数 / GMP
構文
整数 (integer) は、10 進数(基数 10)、16 進数 (基数 16)、8 進数 (基数 8) あるいは 2 進数 (基数 2)
表記で指定可能です。オプションで、符号(-または+)を前に付けることが可能です。
8 進数表記を使用する場合、数の前に 0 (ゼロ)
を付ける必要があります。
PHP 8.1.0 以降では、数の前に
0o や 0O を付けても
8進数を表記できます。
また、16 進数表記を使用するには、数の前に
0x を付ける必要があります。
2 進数表記を使用する場合、数の前に 0b を付ける必要があります。
PHP 7.4.0 以降では、可読性を向上させるために整数リテラルの桁の間にアンダースコア
(_) を含めることができるようになりました。
アンダースコアは PHP の scanner が除去します。
整数リテラル
]]>
PHP 8.1.0 以降で使用可能な整数リテラルの形式は以下のように定義されています。
(これより前のバージョンでは、8進数のプレフィックス 0o や 0O が許されませんでした。さらに、PHP 7.4.0 より前のバージョンでは、アンダースコアも許されませんでした)
整数のサイズはプラットフォームに依存しますが、
約 20 億 (32 ビット符号付) が一般的な値です。
64 ビットプラットフォームでの通常の最大値は、およそ 9*10^18 (900京) になります。
PHP は符号無し整数をサポートしていません。
整数のサイズは定数 PHP_INT_SIZE で、
整数の最大値は定数 PHP_INT_MAX で、
整数の最小値は定数 PHP_INT_MIN で決まります。
整数のオーバーフロー
int型の範囲外の数を指定した場合、かわりに
floatとして解釈されます。また、結果が
int型の範囲外の数となるような計算を行うと
floatが代わりに返されます。
整数のオーバーフロー
]]>
整数の除算
PHP には整数の割り算を行う演算子はありません。
整数の割り算を行うには、intdiv 関数を使って下さい。
1/2 は
float 型の 0.5 になります。
0 に近い方向の整数値に値を丸めるためにキャストを使用することができ、
また、round 関数を使用することもできます。
除算の例
]]>
整数への変換
int に値を明示的に変換するには、キャスト
(int) または (integer)
のどちらかを使用してください。しかし、多くの場合、演算子、関数、制御構造が
int 引数を必要とする場合、値は自動的に変換されるため、
キャストを使用する必要はありません。
関数 intval を用いて値を整数に変換することも可能です。
resource を int に変換すると、その結果は一意なリソース番号となります。
これは、その resource に対して PHP が実行時に割り当てた番号です。
型の相互変換
を参照ください。
booleans から
&false; は、0 (ゼロ) となり、
&true; は、1 となります。
浮動小数点数から
float から整数に変換する場合、その数はゼロのほうに丸められます。
PHP 8.1.0 以降では、精度を損なうことになる &float; から &integer; への暗黙の変換は推奨されなくなり、警告が発生します。
float 型からキャストする
]]>
float が整数の範囲 (通常は、32 ビットプラットフォームでは +/- 2.15e+9 =
2^31、64 ビットプラットフォームでは +/- 9.22e+18 = 2^63
) を越える場合、結果は undefined となります。これは、
その float が正しい整数の結果を得るために十分な精度を得られなかったからです。
この場合、警告も通知も発生しません!
NaN, Inf, -Inf を int にキャストした結果は、常にゼロとなります。
未知の端数を int にキャストしないでください。
この場合、予期しない結果となることがあります。
]]>
より詳細な情報については、
float の精度に関する注意を参照ください。
文字列から
文字列が
数値形式の文字列
の場合は、対応する整数値に解決されます。
そうでない場合は、ゼロ (0) に変換されます。
NULL から
&null; は、常に0に変換されます。
他の型から
整数への変換の動作は、他の型については定義されません。
現在の動作は、その値がまず
論理値に変換された
場合と同じです。しかし、この動作は予告なく変更されることがありえるので、
これを前提にしてはいけません。