PHPで数値の絶対値(符号を取り除いた値)を取得するには abs() 関数を使います。使い方はシンプルですが、戻り値の型や、フォーム入力をそのまま渡したときのPHP 8でのエラーには注意が必要です。この記事では基本から実用例、つまずきやすいポイントまでまとめます。
この記事の結論:絶対値は
abs($number) で取得します。整数を渡せば整数、浮動小数点を渡せば浮動小数点が返ります。フォーム入力など非数値の可能性がある値は、先に数値へキャストしてから渡します。abs()関数の基本的な使い方
abs() は引数の絶対値を返します。負の数は正に、正の数はそのまま返ります。
abs()の基本
<?php echo abs(-10); // 10 echo abs(20); // 20 echo abs(-15.75); // 15.75
戻り値の型に注意
abs() の戻り値の型は引数の型に従います。整数なら整数、浮動小数点なら浮動小数点が返ります。
戻り値の型
<?php
var_dump(abs(-10)); // int(10)
var_dump(abs(-15.75)); // float(15.75)
var_dump(abs("-42")); // int(42)(数値文字列は数値に変換される)
フォーム入力をそのまま
abs() に渡さないでください。$_POST の値は文字列で、数字以外(空文字や文字列)が入ることがあります。PHP 8 では非数値の文字列を渡すと TypeError になります(PHP 7では警告+0)。先に (float) でキャストするか、is_numeric() で確認してから渡しましょう。入力を安全に処理する
<?php
$input = $_POST['number'] ?? '';
if (is_numeric($input)) {
echo abs((float)$input);
} else {
echo '数値を入力してください';
}
実用例:2つの値の差の大きさ
2つの値の差は、引く順番によって符号が変わります。abs() を使えば、順番に関係なく「差の大きさ」を得られます。しきい値の判定などに便利です。
差の絶対値でしきい値判定
<?php
$expected = 100;
$actual = 93;
$diff = abs($expected - $actual); // 7(順番に関係なく差の大きさ)
if ($diff <= 5) {
echo '許容範囲内です';
} else {
echo "誤差が大きすぎます(差: $diff)";
}
あわせて使う数値関数
| 関数 | 用途 |
|---|---|
abs() |
絶対値 |
round() |
四捨五入 |
ceil() / floor() |
切り上げ / 切り捨て |
max() / min() |
最大値 / 最小値 |
intdiv() / % |
整数除算 / 余り |
よくある質問(FAQ)
Qabs()の戻り値は常に整数ですか?
Aいいえ。引数の型に従います。整数を渡せば整数、浮動小数点を渡せば浮動小数点が返ります(例:
abs(-15.75) は float(15.75))。Qフォームの入力値をabs()に渡したらエラーになりました。
A
$_POST の値は文字列で、非数値が入るとPHP 8では TypeError になります。is_numeric() で確認し、(float) や (int) にキャストしてから渡してください。Q2つの数値の差を必ず正の数で取得したいです。
A
abs($a - $b) を使います。引く順番に関係なく差の大きさが得られるため、誤差やしきい値の判定に便利です。Qマイナスを0にしたいだけの場合もabs()でよいですか?
A「負の数を0にする」だけなら
max(0, $value) が適切です。abs() は -5 を 5 にしますが、max(0, -5) は 0 にします。目的に合わせて選びましょう。まとめ
PHPで絶対値を取得するポイントを整理します。
- 絶対値は
abs($number) - 戻り値の型は引数に従う(int→int、float→float)
- フォーム入力はキャスト/
is_numeric()で検証してから渡す(PHP 8はTypeError) - 差の大きさは
abs($a - $b)で順番を気にせず取得できる - 「負を0にする」だけなら
max(0, $value)が適切
関連として、四捨五入・切り上げ・切り捨て・最大値と最小値・0埋めをする方法もあわせて読むと、PHPの数値処理に強くなれます。
