PHPにおける数値型の基本から、演算子、端数処理、ビット演算、フォーマットや変換まで、初心者にもわかりやすく解説します。

PHPで扱える数値型とは?整数型と浮動小数点型の違い

PHPでは主に以下の2種類の数値型を扱います。型を意識することで、意図しないエラーや精度のズレを防げます。

  • 整数型(int):小数点を含まない数
  • 浮動小数点型(float または double):小数点を含む数

型チェック・変換の基本関数と実装例

関数説明使用例
gettype($var)変数の型を文字列で返すgettype(100)"integer"
is_int($var)整数かどうかを判定 (bool)is_int(3.14)false
is_float($var)浮動小数点かどうかを判定 (bool)is_float(3.14)true
intval($var)整数にキャストintval("12 apples")12
floatval($var)浮動小数点にキャストfloatval("3.14xyz")3.14
<?php
$int = 100; // 整数
$float = 3.14; // 浮動小数点数

echo gettype($int); // 出力: integer
echo gettype($float); // 出力: double
?>

PHPの算術演算子一覧と基本的な使い方

PHPの算術演算子を使うことで、加算・減算・乗算・除算・剰余などの基本的な計算が行えます。

演算子意味結果例
+加算$a + $b左辺と右辺の和
-減算$a - $b左辺から右辺を引いた差
*乗算$a * $b左辺と右辺の積
/除算$a / $b左辺を右辺で割った商
%剰余$a % $b左辺を右辺で割った余り
**べき乗$a ** $b左辺の$b`乗

加算 (+)
数値同士を足し合わせます。文字列同士を結合する場合は .(ドット)演算子を使います。

減算 (-)
左辺から右辺を引きます。

乗算 (*)
左辺と右辺を掛け合わせます。

除算 (/)
左辺を右辺で割ります。結果は自動的に float になる場合があります。

剰余 (%)
左辺を右辺で割ったあとの余りを返します。主に「奇数・偶数判定」や「循環処理」に利用。

べき乗 (**)
PHP 5.6 以降で利用可能。$a ** $b は「$a を$b`乗した値」を返します。

基本的な使い方

<?php
$a = 10;
$b = 3;

echo $a + $b;  // 13
echo "\n";

echo $a - $b;  // 7
echo "\n";

echo $a * $b;  // 30
echo "\n";

echo $a / $b;  // 3.3333333333333
echo "\n";

echo $a % $b;  // 1
echo "\n";

echo $a ** $b; // 10の3乗 = 1000
?>

ビット演算子の基礎:AND・OR・XOR・ビットシフトの使い方

ビット演算子は、数値を2進数として扱う演算です。あまり使用することはないですが、効率的なフラグ管理やパフォーマンス改善に役立ちます。

演算子説明
&AND$a & $b
``OR
^XOR$a ^ $b
~NOT~$a
<<左シフト$a << 1
>>右シフト$a >> 1
<?php
$a = 6;  // 110
$b = 3;  // 011

echo $a & $b; // 2(二進数: 010)
?>

数値の端数処理:切り捨て・切り上げ・四捨五入の方法

PHPには端数処理のための関数が用意されています。

<?php
$num = 3.75;

echo floor($num); // 3:小数点以下を切り捨て
echo ceil($num);  // 4:小数点以下を切り上げ
echo round($num); // 4:四捨五入
?>

数値フォーマット:桁区切り・小数点の整形方法

数値を表示する際には、見やすい形に整形することが重要です。number_format()関数を使えば、通貨や統計の出力が整えられます。

<?php
$price = 1234567.89;

echo number_format($price); // 1,234,568
echo number_format($price, 2); // 1,234,567.89
?>

ランダムな数値を生成する関数の使い方

PHPではランダムな数値を生成するための関数が複数あります。

<?php
echo rand(1, 100);       // 1〜100の間の乱数(整数)
echo mt_rand(1, 1000);   // より高速な乱数生成(整数)
?>

暗号的な乱数が必要な場合はrandom_int()を使います(PHP 7以降)。

<?php
echo random_int(1, 10); // 安全な乱数
?>

数値と文字列の変換、数値操作の関数まとめ

PHPでは数値と文字列を相互に変換することが可能ですが、意図しない型変換に注意が必要です。

1. 型変換(キャスト/専用関数)

方法・関数説明サンプル
(int)$var変数を整数型にキャスト(int)"123px"123
(float)$var変数を浮動小数点型にキャスト(float)"3.14abc"3.14
(string)$var変数を文字列型にキャスト(string)100"100"
intval($var)変数を整数型に変換(キャストと同等)intval("12 apples")12
floatval($var)変数を浮動小数点型に変換floatval("2.5e2")250.0
strval($var)変数を文字列型に変換strval(3.14)"3.14"
settype($var, $type)変数の型を $type(”int”/”float”/”string”…)に変更settype($x, "int");
<?php
$str = "100px";
$num1 = (int)$str;          // 100
$num2 = intval($str);       // 100
$flt  = (float)"3.14abc";   // 3.14
$s    = strval(123.45);     // "123.45"

var_dump($num1, $num2, $flt, $s);
?>

2. 文字列化・書式整形

関数説明サンプル
number_format($num)小数点以下なし、3桁区切りカンマ付きの文字列返却number_format(1234567)"1,234,567"
number_format($num, d)小数点以下 d 桁まで丸めて文字列返却number_format(3.14159, 2)"3.14"
sprintf()/printf()書式指定子で文字列を生成/出力sprintf("%.2f", 2.5)"2.50"
<?php
$price = 9876543.21;
echo number_format($price);         // 9,876,543
echo "\n";
echo number_format($price, 1);      // 9,876,543.2

echo sprintf("残高は %.2f 円です", 1234.5);
// 出力: 残高は 1234.50 円です
?>

3. 数値操作の基本関数

関数説明サンプル
abs($num)絶対値を返すabs(-5)5
round($num, d)四捨五入(小数点以下 d 桁まで)round(3.14159, 3)3.142
ceil($num)切り上げceil(2.1)3
floor($num)切り捨てfloor(2.9)2
max($a, $b, …)引数の中で最大値を返すmax(1, 5, 3)5
min($a, $b, …)引数の中で最小値を返すmin(1, 5, 3)1
pow($a, $b)べき乗($a ** $b と同等)pow(2, 3)8
sqrt($num)平方根sqrt(16)4
rand($min, $max)範囲内の疑似乱数を返すrand(1, 100)57
<?php
echo abs(-10), "\n";        // 10
echo round(2.71828, 2), "\n"; // 2.72
echo ceil(4.2), "\n";        // 5
echo floor(4.8), "\n";       // 4
echo max(3, 7, 2), "\n";     // 7
echo min(3, 7, 2), "\n";     // 2
echo pow(3, 4), "\n";        // 81
echo sqrt(81), "\n";         // 9
echo rand(1, 10), "\n";      // 例: 4
?>

よく使う数値操作関数一覧

関数説明
abs()絶対値を返す
round()四捨五入する
floor()切り捨てる
ceil()切り上げる
number_format()表示フォーマットを整える

まとめ

PHPにおける数値操作は、Web開発のあらゆる場面で必要になります。
本記事では、数値型の基本から演算子・端数処理・ビット演算・フォーマット・乱数生成・型変換までを網羅しました。
初学者の方は、実際にコードを書きながら理解を深めていくことをおすすめします。