ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本の算術演算子
$a = 10; $b = 3;
echo $a + $b; // 13
echo $a - $b; // 7
echo $a * $b; // 30
echo $a / $b; // 3.3333333333333 ★ 常に float
echo $a % $b; // 1
echo $a ** $b; // 1000 (累乗, PHP 5.6+)
// 整数除算は intdiv (PHP 7+)
echo intdiv(10, 3); // 3
echo intdiv(-10, 3); // -3 (0 方向に切り捨て)
// 浮動小数の剰余
echo fmod(5.5, 2); // 1.5
除算の振る舞い (Java/PHP/Pythonの違い)
| 式 | PHP | Java | Python 3 |
|---|---|---|---|
5 / 2 | 2.5 (float) | 2 (int) | 2.5 (float) |
| 整数除算 | intdiv(5, 2) | int 同士の / | 5 // 2 |
| 累乗 | 5 ** 2 | Math.pow(5, 2) | 5 ** 2 |
| 0 除算 (int) | DivisionByZeroError (PHP 8+) | ArithmeticException | ZeroDivisionError |
| 0 除算 (float) | INF / NAN | Infinity / NaN | ZeroDivisionError |
Type Juggling (緩い型変換)
// PHP は文字列を自動で数値に変換
var_dump('5' + 3); // int(8)
var_dump('5.5' + 3); // float(8.5)
var_dump('5abc' + 3); // PHP 7: int(8) + Warning / PHP 8: TypeError
var_dump('abc' + 3); // PHP 7: int(3) + Warning / PHP 8: TypeError
// PHP 8: 非数値文字列の算術は Deprecated
// → 明示キャストを推奨
$x = (int) '5' + 3; // 8
$x = intval('5abc') + 3; // 8
$x = (int) filter_var($s, FILTER_SANITIZE_NUMBER_INT) + 3;
関連関数: 丸め / 切り捨て / 切り上げ
echo round(3.5); // 4
echo round(2.5); // 3 (Banker's Rounding ではない、四捨五入)
echo round(3.456, 2); // 3.46
echo round(1234, -2); // 1200 (10の位以下を丸め)
echo floor(3.9); // 3 (常に下げる)
echo ceil(3.1); // 4 (常に上げる)
// 絶対値
echo abs(-3.14); // 3.14
// 累乗・平方根
echo pow(2, 10); // 1024 (** と同じ)
echo sqrt(16); // 4
// 最大・最小
echo max(1, 5, 3); // 5
echo min([1, 5, 3]); // 1
// 0埋め / 桁区切り
echo number_format(1234567.891, 2); // '1,234,567.89'
echo str_pad('5', 3, '0', STR_PAD_LEFT); // '005'
0 除算と特殊値
// PHP 8+ では int / 0 が例外に
try {
echo 10 / 0;
} catch (DivisionByZeroError $e) {
/* Division by zero */
}
// 浮動小数の 0 除算 → INF / NAN
$inf = 1.0 / 0; // PHP 7: INF / PHP 8: 例外
$nan = 0.0 / 0; // PHP 7: NAN / PHP 8: 例外
// ※ PHP 8+ では float でも例外なので意外に注意
// 例外を回避するなら事前チェック
$result = ($b === 0 || $b === 0.0) ? 0 : ($a / $b);
// INF / NAN 判定
var_dump(is_infinite(INF)); // true
var_dump(is_nan(NAN)); // true
BCMath で任意精度
// 金額計算 (0.1 + 0.2 問題)
echo 0.1 + 0.2; // 0.3 (見た目)
var_dump(0.1 + 0.2 == 0.3); // false !
var_dump(0.1 + 0.2); // float(0.30000000000000004)
// BCMath なら正確
echo bcadd('0.1', '0.2', 2); // '0.30'
echo bcsub('1.50', '0.30', 2); // '1.20'
echo bcmul('1.5', '0.1', 2); // '0.15'
echo bcdiv('10', '3', 4); // '3.3333'
echo bcmod('10', '3'); // '1'
echo bcpow('2', '100'); // '1267650600228229401496703205376'
// スケール (小数桁) はデフォルト 0
bcscale(4); // 全関数のデフォルトに反映
GMP で巨大な整数
// 1000 桁の階乗
$n = gmp_init(1);
for ($i = 2; $i <= 100; $i++) {
$n = gmp_mul($n, $i);
}
echo gmp_strval($n); // 100! の正確な値
// 暗号系
$big1 = gmp_init('123456789012345678901234567890');
$big2 = gmp_init('987654321098765432109876543210');
echo gmp_strval(gmp_mul($big1, $big2));
剰余 (%) の符号
// PHP は被除数の符号に従う (Java と同じ)
echo 7 % 3; // 1
echo -7 % 3; // -1
echo 7 % -3; // 1
echo -7 % -3; // -1
// 正の剰余が欲しい (巡回バッファ用)
function pmod(int $a, int $m): int {
return (($a % $m) + $m) % $m;
}
echo pmod(-1, 5); // 4
パフォーマンスメモ
- 整数演算 > 浮動小数演算 > BCMath/GMP
- 金額は整数の最小単位 (円なら 1) で持つのも実用的 (float の誤差回避 + 高速)
- ループ内の
pow($x, 2)より$x * $xの方が速い $x % 2 == 0より($x & 1) == 0の方がわずかに速い (が可読性優先)
FAQ
Q: 5 / 2 が PHP では 2.5、Java では 2 なのはなぜ?
A: PHP は除算結果が割り切れないなら常に float に格上げ。整数除算したいなら intdiv()。
Q: 金額計算で float を使っていいか?
A: 推奨しません。BCMath か「最小単位で整数管理」(円なら円単位の int) が定石。
Q: 0.1 + 0.2 == 0.3 が false なのはバグ?
A: バグではなく IEEE 754 浮動小数の仕様。abs($a - $b) < PHP_FLOAT_EPSILON で比較するか BCMath を使ってください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?