PHP Math 函数提供了丰富的数学运算功能,包括基本算术运算、三角函数、指数对数函数、随机数生成、进制转换等。这些函数是PHP核心的一部分,无需额外安装即可使用。
abs(), pow(), sqrt(), max(), min() 等
sin(), cos(), tan(), asin(), acos() 等
decbin(), dechex(), decoct(), bindec() 等
<?php
// 绝对值
echo abs(-5); // 输出: 5
// 幂运算
echo pow(2, 3); // 输出: 8 (2的3次方)
// 平方根
echo sqrt(16); // 输出: 4
// 四舍五入
echo round(3.14159, 2); // 输出: 3.14
echo round(3.5); // 输出: 4
// 向上取整和向下取整
echo ceil(3.2); // 输出: 4
echo floor(3.8); // 输出: 3
?>
<?php
// 生成随机整数(传统方法)
$random1 = rand(1, 100); // 1到100之间的随机数
$random2 = mt_rand(1, 100); // Mersenne Twister算法,更快更随机
// PHP 7+ 加密安全的随机数
$secureRandom = random_int(1, 100);
// 生成随机浮点数
$randomFloat = mt_rand() / mt_getrandmax();
echo "随机数: $random1, $random2, 安全随机数: $secureRandom";
?>
<?php
$number = 255;
// 十进制转二进制
$binary = decbin($number); // 11111111
echo "二进制: $binary<br>";
// 十进制转十六进制
$hex = dechex($number); // ff
echo "十六进制: $hex<br>";
// 十进制转八进制
$octal = decoct($number); // 377
echo "八进制: $octal<br>";
// 二进制转十进制
$decFromBin = bindec('11111111'); // 255
echo "二进制转十进制: $decFromBin<br>";
// 任意进制转换
$result = base_convert('ff', 16, 2); // 十六进制转二进制
echo "十六进制ff转二进制: $result";
?>
<?php
$angle = 45; // 角度
// 角度转弧度
$radians = deg2rad($angle);
// 正弦、余弦、正切
$sin = sin($radians);
$cos = cos($radians);
$tan = tan($radians);
echo "角度 $angle° 的正弦: " . round($sin, 4) . "<br>";
echo "角度 $angle° 的余弦: " . round($cos, 4) . "<br>";
echo "角度 $angle° 的正切: " . round($tan, 4) . "<br>";
// 反三角函数
$arcsin = rad2deg(asin($sin));
echo "反正弦: " . round($arcsin, 2) . "°";
?>
intdiv() 函数:整数除法,返回商的整数部分random_int() 和 random_bytes():加密安全的随机数生成rand() 和 mt_rand() 默认播种,提高随机性random_int() 替代 rand()<?php
// PHP 7.0+ 新增的 intdiv() 函数
echo intdiv(10, 3); // 输出: 3 (整数除法)
// PHP 7.0+ 新增的 random_int() 函数
$secureRandom = random_int(1, 1000);
// 生成加密安全的随机字节
$randomBytes = random_bytes(16);
echo bin2hex($randomBytes); // 转换为十六进制显示
// PHP 7.2+ 新增的浮点数精度设置(影响round等函数)
ini_set('precision', 17); // 设置浮点数精度为17位
?>
下表列出了所有PHP数学函数及其简要描述,点击函数名查看详细用法:
| 函数 | 描述 |
|---|---|
| abs() | 返回一个数的绝对值。 |
| acos() | 返回一个数的反余弦。 |
| acosh() | 返回一个数的反双曲余弦。 |
| asin() | 返回一个数的反正弦。 |
| asinh() | 返回一个数的反双曲正弦。 |
| atan() | 返回一个数的反正切。 |
| atan2() | 返回两个变量 x 和 y 的反正切。 |
| atanh() | 返回一个数的反双曲正切。 |
| base_convert() | 在任意进制之间转换数字。 |
| bindec() | 把二进制数转换为十进制数。 |
| ceil() | 向上舍入为最接近的整数。 |
| cos() | 返回一个数的余弦。 |
| cosh() | 返回一个数的双曲余弦。 |
| decbin() | 把十进制数转换为二进制数。 |
| dechex() | 把十进制数转换为十六进制数。 |
| decoct() | 把十进制数转换为八进制数。 |
| deg2rad() | 将角度值转换为弧度值。 |
| exp() | 返回 Ex 的值。 |
| expm1() | 返回 Ex - 1 的值。 |
| floor() | 向下舍入为最接近的整数。 |
| fmod() | 返回 x/y 的浮点数余数。 |
| getrandmax() | 返回通过调用 rand() 函数显示的随机数的最大可能值。 |
| hexdec() | 把十六进制数转换为十进制数。 |
| hypot() | 计算直角三角形的斜边长度。 |
| is_finite() | 判断是否为有限值。 |
| is_infinite() | 判断是否为无限值。 |
| is_nan() | 判断是否为非数值。 |
| lcg_value() | 返回范围为 (0, 1) 的一个伪随机数。 |
| log() | 返回一个数的自然对数(以 E 为底)。 |
| log10() | 返回一个数的以 10 为底的对数。 |
| log1p() | 返回 log(1+number) |
| max() | 返回一个数组中的最大值,或者几个指定值中的最大值。 |
| min() | 返回一个数组中的最小值,或者几个指定值中的最小值。 |
| mt_getrandmax() | 返回通过调用 mt_rand() 函数显示的随机数的最大可能值。 |
| mt_rand() | 使用 Mersenne Twister 算法生成随机整数。 |
| mt_srand() | 播种 Mersenne Twister 随机数生成器。 |
| octdec() | 把八进制数转换为十进制数。 |
| pi() | 返回圆周率 PI 的值。 |
| pow() | 返回 x 的 y 次方。 |
| rad2deg() | 把弧度值转换为角度值。 |
| rand() | 返回随机整数。 |
| round() | 对浮点数进行四舍五入。 |
| sin() | 返回一个数的正弦。 |
| sinh() | 返回一个数的双曲正弦。 |
| sqrt() | 返回一个数的平方根。 |
| srand() | 播种随机数生成器。 |
| tan() | 返回一个数的正切。 |
| tanh() | 返回一个数的双曲正切。 |
| intdiv() | PHP 7+ 新增:整数除法,返回商的整数部分 |
| random_int() | PHP 7+ 新增:生成加密安全的随机整数 |
PHP提供了一系列预定义的数学常量,可在数学运算中直接使用:
| 常量 | 值 | 描述 | PHP 版本 |
|---|---|---|---|
INF |
INF | 无限 | PHP 4 |
M_E |
2.7182818284590452354 | 自然对数的底数 e | PHP 4 |
M_EULER |
0.57721566490153286061 | 欧拉常数 | PHP 4 |
M_LNPI |
1.14472988584940017414 | 圆周率 PI 的自然对数:log_e(pi) | PHP 5.2 |
M_LN2 |
0.69314718055994530942 | 2 的自然对数:log_e 2 | PHP 4 |
M_LN10 |
2.30258509299404568402 | 10 的自然对数:log_e 10 | PHP 4 |
M_LOG2E |
1.4426950408889634074 | E 的以 2 为底的对数:log_2 e | PHP 4 |
M_LOG10E |
0.43429448190325182765 | E 的以 10 为底的对数:log_10 e | PHP 4 |
M_PI |
3.14159265358979323846 | 圆周率 Pi | PHP 4 |
M_PI_2 |
1.57079632679489661923 | Pi/2 | PHP 4 |
M_PI_4 |
0.78539816339744830962 | Pi/4 | PHP 4 |
M_1_PI |
0.31830988618379067154 | 1/Pi | PHP 4 |
M_2_PI |
0.63661977236758134308 | 2/Pi | PHP 4 |
M_SQRTPI |
1.77245385090551602729 | 圆周率 PI 的平方根:sqrt(pi) | PHP 5.2 |
M_2_SQRTPI |
1.12837916709551257390 | 圆周率 PI 的 2/平方根:2/sqrt(pi) | PHP 4 |
M_SQRT1_2 |
0.70710678118654752440 | 1/2 的平方根:1/sqrt(2) | PHP 4 |
M_SQRT2 |
1.41421356237309504880 | 2 的平方根:sqrt(2) | PHP 4 |
M_SQRT3 |
1.73205080756887729352 | 3 的平方根:sqrt(3) | PHP 5.2 |
NAN |
NAN | 不是一个数字 | PHP 4 |
PHP_ROUND_HALF_UP |
1 | 遇到 .5 的情况时向上舍入 | PHP 5.3 |
PHP_ROUND_HALF_DOWN |
2 | 遇到 .5 的情况时向下舍入 | PHP 5.3 |
PHP_ROUND_HALF_EVEN |
3 | 遇到 .5 的情况时取偶数舍入 | PHP 5.3 |
PHP_ROUND_HALF_ODD |
4 | 遇到 .5 的情况时取奇数舍入 | PHP 5.3 |
<?php
// 使用数学常量
echo "圆周率 π = " . M_PI . "<br>";
echo "自然对数的底 e = " . M_E . "<br>";
// 计算圆的面积
$radius = 5;
$area = M_PI * pow($radius, 2);
echo "半径为 $radius 的圆面积: " . round($area, 2);
// 使用舍入模式常量
$number = 3.5;
echo "向上舍入: " . round($number, 0, PHP_ROUND_HALF_UP) . "<br>";
echo "向下舍入: " . round($number, 0, PHP_ROUND_HALF_DOWN) . "<br>";
echo "向偶数舍入: " . round($number, 0, PHP_ROUND_HALF_EVEN);
?>
mt_rand() 替代 rand(),更随机更快random_int() 生成加密安全的随机数bcmath 扩展避免浮点数精度问题rand() 和 mt_rand() 需要播种以获得更好随机性<?php
// 浮点数精度问题
$a = 0.1 + 0.2;
$b = 0.3;
// 错误比较方式
echo ($a == $b) ? '相等' : '不相等'; // 输出: 不相等
// 正确比较方式(使用误差范围)
$epsilon = 0.00001;
echo (abs($a - $b) < $epsilon) ? '相等' : '不相等'; // 输出: 相等
// 高精度计算使用bcmath扩展
echo bcadd('0.1', '0.2', 10); // 输出: 0.3000000000
?>
掌握PHP数学函数是Web开发的基础技能。建议从基本运算函数开始学习,逐步掌握三角函数、随机数生成、进制转换等高级功能。在实际项目中,注意浮点数精度问题和随机数的安全性。PHP 7+ 新增的加密安全随机数函数特别重要,务必掌握。