PHP – 数学函数



为了实现数学运算,PHP 具有数学(算术)运算符和许多数学函数。在本章中,通过示例解释了以下数学函数。

PHP abs() 函数

abs() 函数是 PHP 迭代器中的内置函数。此函数接受任何数字作为参数并返回正值,而不考虑其符号。任何数字的绝对值始终为正数。


 abs( mixed $num)

PHP abs() 函数返回 num 的绝对值。如果 num 的数据类型为 float,则其返回类型也将为 float。对于 integer 参数,返回类型为 integer

看看下面的例子 -


<?php
   $num=-9.99;
   echo "negative float number: " . $num . "\n";
   echo "absolute value : " . abs($num) . "\n"; 

   $num=25.55;
   echo "positive float number: " . $num . "\n";
   echo "absolute value : " . abs($num). "\n";

   $num=-45;
   echo "negative integer number: " . $num . "\n";
   echo "absolute value : " . abs($num) . "\n"; 

   $num=25;
   echo "positive integer number: " . $num . "\n";
   echo "absolute value : " . abs($num);
?>

它将产生以下输出 -

negative float number: -9.99
absolute value : 9.99
positive float number: 25.55
absolute value : 25.55
negative integer number: -45
absolute value : 45
positive integer number: 25
absolute value : 25

PHP ceil() 函数

ceil() 函数是 PHP 迭代器中的内置函数。此函数接受任何浮点数作为参数,并将其四舍五入到下一个最高的整数。此函数始终返回一个浮点数,因为 float 的范围大于整数的范围。


 ceil ( float $num ) : float

PHP ceil() 函数返回大于或等于给定参数的最小整数值。

示例 1

以下代码将 5.78 四舍五入为其下一个最高整数,即 6


<?php
   $arg=5.78; 
   $val=ceil($arg);
   echo "ceil(" . $arg .  ") = " . $val;
?>

它将产生以下输出 -

ceil(5.78) = 6

示例 2

以下示例显示如何查找下一个最高整数 15.05。


<?php
   $arg=15.05; 
   $val=ceil($arg);
   echo "ceil(" . $arg .  ") = " . $val;
?>

它将产生以下输出 -

ceil(15.05) = 16

示例 3

对于负数,它四舍五入到 0。


<?php
   $arg=-3.95; 
   $val=ceil($arg);
   echo "ceil(" . $arg .  ") = " . $val;
?>

它将产生以下输出 -

ceil(-3.95) = -3

PHP exp() 函数

exp() 函数计算 e 的指数,即欧拉数。PHP 有一个预定义的常数M_E,它表示欧拉数,等于 2.7182818284590452354。因此,exp(x) 返回 2.7182818284590452354x

此函数始终返回浮点数。


 exp ( float $arg ) : float

PHP exp() 函数返回 e 的给定 arg 的欧拉数。请注意,e 是自然算法的基础。exp() 函数是自然对数的逆函数。

示例 1

PHP 中的预定义常量之一是 M_LN2,它代表 loge2,等于 0.69314718055994530942。因此,该值的 exp() 将返回 2。


<?php
   echo "exp(" . M_LN2 . ") = " . exp(M_LN2);
?>

它将产生以下输出 -

exp(0.69314718055995) = 2

示例 2

M_LN10 是另一个表示 loge10 的预定义常量。该程序计算 exp(M_LN10) 并返回 10。


<?php
   echo "exp(" . M_LN10 . ") = " . exp(M_LN10);
?>

它将产生以下输出 -

exp(2.302585092994) = 10

PHP floor() 函数

floor() 函数是 PHP 解释器中的另一个内置函数。此函数接受任何浮点数作为参数,并将其向下舍入到下一个最低整数。此函数始终返回一个浮点数,因为 float 的范围大于整数的范围。


 floor ( float $num ) : float

PHP floor() 函数返回小于或等于给定参数的最大整数。

示例 1

以下示例显示如何将 15.05 舍入为其下一个最高整数,即 15


<?php
   $arg=15.05; 
   $val=floor($arg);
   echo "floor(" . $arg .  ") = " . $val;
?>

它将产生以下输出 -

floor(15.05) = 15

示例 2

以下示例显示如何查找下一个最低整数 5.78。


<?php
   $arg=5.78; 
   $val=floor($arg);
   echo "floor(" . $arg .  ") = " . $val;
?>

它将产生以下输出 -

floor(5.78) = 5

示例 3

负数从 0 开始四舍五入。


<?php
   $arg=-3.95; 
   $val=floor($arg);
   echo "floor(" . $arg .  ") = " . $val;
?>

它将产生以下输出 -

floor(-3.95) = -4

PHP intdiv() 函数

intdiv() 函数返回两个整数参数的整数商。如果 x/y 的结果是 “i” 作为除法,而 “r” 是余数,则 −


 x = y*i+r

在这种情况下,intdiv(x,y) 返回 “i”


 intdiv ( int $x , int $y ) : int

x” 参数构成除法表达式的分子部分,而 “y” 参数构成除法表达式的分母部分。

PHP intdiv() 函数返回 “x” 除以 “y” 的整数商。如果两个参数均为正或两个参数均为负,则返回值为正。

示例 1

以下示例显示,如果分子小于分母,则 intdiv() 函数返回 0。


<?php
   $x=10;
   $y=3; 
   $r=intdiv($x, $y);
   echo "intdiv(" . $x . "," . $y . ") = " . $r . "\n";
   $r=intdiv($y, $x);
   echo "intdiv(" . $y . "," . $x . ") = " . $r;
?>

它将产生以下输出 -

intdiv(10,3) = 3
intdiv(3,10) = 0

示例 2

在下面的示例中,intdiv() 函数返回一个负整数,因为分子或分母为负数。


<?php
   $x=10;
   $y=3; 
   $r=intdiv($x, $y);
   echo "intdiv(" . $x . "," . $y . ") = " . $r . "\n";

   $x=10;
   $y=-3; 
   $r=intdiv($x, $y);
   echo "intdiv(" . $x . "," . $y . ") = " . $r . "\n";

   $x=-10;
   $y=3; 
   $r=intdiv($x, $y);
   echo "intdiv(" . $x . "," . $y . ") = " . $r . "\n";

   $x=-10;
   $y=-3; 
   $r=intdiv($x, $y);
   echo "intdiv(" . $x . "," . $y . ") = " . $r ;
?>

它将产生以下输出 -

intdiv(10,3) = 3
intdiv(10,-3) = -3
intdiv(-10,3) = -3
intdiv(-10,-3) = 3

示例 3

在下面的示例中,Denominator 为 0。这会导致 DivisionByZeroError 异常。


<?php
   $x=10;
   $y=0; 
   $r=intdiv($x, $y);
   echo "intdiv(" . $x . "," . $y . ") = " . $r . "\n";
?>

它将产生以下输出 -

PHP Fatal error: Uncaught DivisionByZeroError: Division by zero

示例 4

两个参数中的小数部分都将被忽略。PHP intdiv() 函数仅适用于整数部分。


<?php
   $x=2.90;
   $y=1.90; 
   $r=intdiv($x, $y);
   echo "intdiv(" . $x . "," . $y . ") = " . $r . "";
?>

它将产生以下输出 -

intdiv(2.9,1.9) = 2

PHP log10() 函数

log10 () 函数计算数字的以 10 为底的对数。以 10 为底的对数也称为通用算法或标准算法。log10(x) 函数计算 log10x。它与自然算法的关系如下 -


log10x=logex/loge10 ; So that
log10100=loge100/loge10 = 2

在 PHP 中,log10 由 log10() 函数表示


 log10 ( float $arg ) : float

PHP log10() 函数返回 arg 的以 10 为底的对数。

示例 1

以下代码计算以 100 为基数的 10 对数


<?php
   $arg=100;
   echo "log10(" . $arg. ")=" . log10($arg) . "";
?>

它将产生以下输出 -

log10(100)=2

示例 2

以下代码计算欧拉数 M_E 的以 10 为底的对数。结果等于预定义的常量 M_LOG10E


<?php
   $arg=M_E;
   echo "log10(" . $arg. ")=" . log10($arg) . "\n";
   echo "predefined constant M_LOG10E=" . M_LOG10E;
?>

它将产生以下输出 -

log10(2.718281828459)=0.43429448190325
predefined constant M_LOG10E=0.43429448190325

示例 3

以下代码计算 log100 并返回 -∞。


<?php
   $arg=0;
   echo "log10(" . $arg. ")=" . log10($arg) . "";
?>

它将产生以下输出 -

log10(0)=-INF

示例 4

类似地,sqrt(-1) 会得到 NAN。因此,它的 log10() 也返回 NAN。


<?php
   $arg=sqrt(-1);
   echo "log10(" . $arg. ")=" . log10($arg) . "";
?>

它将产生以下输出 -

log10(NAN)=NAN

PHP max()函数

max () 函数返回数组中最高的元素,或者两个或多个逗号分隔参数中最高的元素。


 max ( array $values ) : mixed


 max ( mixed $value1 [, mixed $... ] ) : mixed
  • 如果只给出一个参数,它应该是一个值数组,这些值可以是相同或不同类型的。
  • 如果给出了两个或多个参数,则它们应该是相同或不同类型的任何可比较值。

PHP max() 函数返回数组参数或值序列中的最大值。标准比较运算符适用。如果多个不同类型的值计算相等(例如 0 和 'PHP'),则将返回函数的第一个参数。

示例 1

以下代码返回数值数组中的最大值。


<?php
   $arg=array(23, 5.55, 142, 56, 99);
   echo "array=";
   foreach ($arg as $i) echo $i . ",";
   echo "\n"; 
   echo "max = " . max($arg);
?>

它将产生以下输出 -

array=23,5.55,142,56,99,
max = 142

示例 2

以下代码从字符串数组中返回 max()


<?php
   $arg=array("Java", "Angular", "PHP", "C", "Kotlin");
   echo "array=";
   foreach ($arg as $i) echo $i . ",";
   echo "\n"; 
   echo "max = " . max($arg);
?>

它将产生以下输出 -

array=Java,Angular,PHP,C,Kotlin,
max = PHP

示例 3

在下面的示例中,为 max() 函数提供了一系列字符串值。让我们看看它的行为方式 -


<?php
   $val1="Java";
   $val2="Angular";
   $val3="PHP";
   $val4="C";
   $val5="Kotlin";
   echo "values=" . $val1 . "," . $val2 . "," . $val3 . "," .     $val4 . "," . $val5 . "\n";
   echo "max = " . max($val1, $val2, $val3,$val4,$val5);
?>

它将产生以下输出 -

values=Java,Angular,PHP,C,Kotlin
max = PHP

示例 4

在此示例中,给定的数组是混合数据类型的集合。


<?php
   $arg=array(23, "Java", 142, 1e2, 99);
   echo "array=";
   foreach ($arg as $i) echo $i . ",";
   echo "\n"; 
   echo "max = " . max($arg);
?>

它将产生以下输出 -

array=23,Java,142,100,99,
max = 142

PHP min() 函数

min () 函数返回数组中最低的元素,或两个或多个逗号分隔参数中最低的元素。


 min ( array $values ) : mixed


 min ( mixed $value1 [, mixed $... ] ) : mixed
  • 如果只给出一个参数,它应该是一个值数组,这些值可以是相同或不同类型的
  • 如果给出了两个或多个参数,则它们应该是相同或不同类型的任何可比较值

PHP min() 函数返回数组参数或值序列中的最低值。标准比较运算符适用。如果多个不同类型的值计算相等(例如 0 和 'PHP'),则将返回函数的第一个参数

示例 1

以下代码返回数值数组中的最小值。


<?php
   $arg=array(23, 5.55, 142, 56, 99);
   echo "array=";
   foreach ($arg as $i) echo $i . ",";
   echo "\n"; 
   echo "min = " . min($arg);
?>

它将产生以下输出 -

array=23,5.55,142,56,99,
min = 5.55

示例 2

下面的代码从字符串数组中返回 min()


<?php
   $arg=array("Java", "Angular", "PHP", "C", "Kotlin");
   echo "array=";
   foreach ($arg as $i) echo $i . ",";
   echo "\n"; 
   echo "min = " . min($arg);
?>

它将产生以下输出 -

array=Java,Angular,PHP,C,Kotlin,
min = Angular

示例 3

在此示例中,向 min() 函数提供了一系列字符串值。


<?php
   $val1="Java";
   $val2="Angular";
   $val3="PHP";
   $val4="C";
   $val5="Kotlin";
   echo "values=" . $val1 . "," . $val2 . "," . $val3 . "," .     $val4 . "," . $val5 . "\n";
   echo "min = " . min($val1, $val2, $val3,$val4,$val5);
?>

它将产生以下输出 -

values=Java,Angular,PHP,C,Kotlin
min = Angular

示例 4

在此示例中,给定的数组是混合数据类型的集合。


<?php
   $arg=array(23, "Java", 142, 1e2, 99);
   echo "array=";
   foreach ($arg as $i) echo $i . ",";
   echo "\n"; 
   echo "min = " . min($arg);
?>

它将产生以下输出 -

array=23,Java,142,100,99,
min = 23

PHP pow()函数

pow () 函数用于计算某个数字的幂。它返回 xy 计算,也称为 x 提升到 y. PHP 也提供 “**” 作为幂运算符。

因此,pow(x,y) 返回与 x**y 相同的 xy。


 pow ( number $base , number $exp ) : number

第一个参数是要引发的基数。第二个参数是需要提高到的 base 的幂。

PHP pow() 函数返回 exp 的幂的基数。如果两个参数都是非负整数,则结果将返回为 integer,否则将返回为 float

示例 1

以下示例使用 pow() 函数计算 102 −


<?php
   echo "pow(10,2) = " . pow(10,2);
   echo " using ** operator " . 10**2;
?>

它将产生以下输出 -

pow(10,2) = 100 using ** operator 100

示例 2

任何提高到 0 的数字都会导致 1。这在以下示例中得到了验证 -


<?php
   $x=10;
   $y=0;
   echo "pow(" . $x, "," . $y . ")=". pow($x,$y);
?>

它将产生以下输出 -

pow(10,0)=1

示例 3

以下示例显示了如何使用 pow() 函数计算 100 的平方根 -


<?php
   $x=100;
   $y=0.5;
   echo "pow(" . $x, "," . $y . ")=". pow($x,$y) . "\n";
   echo "using sqrt() function : ". sqrt(100);
?>

它将产生以下输出 -

pow(100,0.5)=10
using sqrt() function : 10

示例 4

此示例说明如何使用 pow() 函数计算圆的面积。


<?php
   $radius=5;
   echo "radius = " . $radius . " area = " . M_PI*pow(5,2);
?>

它将产生以下输出 -

radius = 5 area = 78.539816339745

PHP round()函数

round() 函数被证明可用于将任何浮点数四舍五入到所需的精度级别。正精度参数会导致数字在小数点后四舍五入;而负精度时,舍入发生在小数点之前。默认情况下,精度为 “0”。

例如,round(10.6) 返回 11,round(10.2) 返回 10。该函数始终返回浮点数。

此函数还有另一个名为 mode 的可选参数,该参数采用稍后描述的重新定义常量之一。


 round ( float $value , int $precision , int $mode ) : float

参数

  • value − 要四舍五入的浮点数。
  • precision  − 要舍入到的十进制位数。默认值为 0。正精度将给定的数字舍入到小数点后。负精度将给定数字四舍五入到小数点之前。
  • Mode - 以下预定义常量之一。
常数 描述
PHP_ROUND_HALF_UP

当 0 到达一半时,将数字舍入到 0 之外。因此,1.5 变为 2,-1.5 变为 -2

PHP_ROUND_HALF_DOWN

当数字到达一半时,将数字舍入到 0 处。因此 1.5 变为 1,-1.5 变为 -1

PHP_ROUND_HALF_EVEN

将数字四舍五入到最接近的偶数值

PHP_ROUND_HALF_ODD

将数字四舍五入到最接近的奇数值

PHP round() 函数通过将值四舍五入到所需的精度来返回一个浮点数。

示例 1

以下代码将给定的数字四舍五入为正精度值 -


<?php
   $arg=1234.567;
   echo "round(" . $arg . ") = " . round($arg) . "\n";
   echo "round(" . $arg . ",1) = " . round($arg,1) . "\n";
   echo "round(" . $arg . ",2) = " . round($arg,2) . "";
?>

它将产生以下输出 -

round(1234.567) = 1235
round(1234.567,1) = 1234.6
round(1234.567,2) = 1234.57

示例 2

以下代码将数字四舍五入为负精度值 -


<?php
   $arg=1234.567;
   echo "round(" . $arg . ") = " . round($arg) . "\n";
   echo "round(" . $arg . ",-1) = " . round($arg,-1) . "\n";
   echo "round(" . $arg . ",-2) = " . round($arg,-2) . "";
?>

它将产生以下输出 -

round(1234.567) = 1235
round(1234.567,-1) = 1230
round(1234.567,-2) = 1200

示例 3

以下代码使用 UP 和 DOWN 模式常量进行舍入 -


<?php
   echo "round(3.45,HALF_UP) = " . round(3.45,0, PHP_ROUND_HALF_UP) . "\n";
   echo "round(3.75 HALF_UP) = " . round(3.75, 1, PHP_ROUND_HALF_DOWN) . "";
?>

它将产生以下输出 -

round(3.45,HALF_UP) = 3
round(3.75 HALF_UP) = 3.7

示例 4

以下代码使用 ODD 和 EVEN 模式进行舍入 -


<?php
   echo "round( 3.45,HALF_ODD) = " . round(3.45,0, PHP_ROUND_HALF_ODD) . "\n";
   echo "round(3.78 HALF_EVEN) = " . round(3.78, 0, PHP_ROUND_HALF_EVEN) . "";
?>

它将产生以下输出 -

round(3.45,HALF_ODD) = 3
round(3.78, HALF_EVEN) = 4

PHP sqrt() 函数

sqrt() 函数返回正浮点数的平方根。由于未定义负数的平方根,因此返回 NAN。这是最常用的函数之一。此函数始终返回浮点数。


 sqrt (float $arg) : float

PHP sqrt() 函数返回给定 arg 数的平方根。对于负数,该函数返回 NAN。

示例 1

以下代码计算 100 的平方根 -


<?php
   $arg = 100;
   echo "Square root of " . $arg . "=" . sqrt($arg) . "";
?>

它将产生以下输出 -

Square root of 100=10

示例 2

对于 sqrt(2)、1/sqrt(2) 和 sqrt(3),PHP 分别有特殊的预定义常量 M_SQRT2、M_SQRT1_2 和 M_SQRT3。


<?php
   echo "sqrt(2) = " . sqrt(2) . "\n";
   echo "M_SQRT2 = " . M_SQRT2. "\n";
   echo "sqrt(3) = " . sqrt(3) . "\n";
   echo "M_SQRT3 = " . M_SQRT3 . "\n";
   echo "1/sqrt(2)) = " . 1/sqrt(2) . "\n";
   echo "M_SQRT1_2 = " . M_SQRT1_2 . "";
?>

它将产生以下输出 -

sqrt(2) = 1.4142135623731
M_SQRT2 = 1.4142135623731
sqrt(3) = 1.7320508075689
M_SQRT3 = 1.7320508075689
1/sqrt(2)) = 0.70710678118655
M_SQRT1_2 = 0.70710678118655

示例 3

数学常数 M_SQRTPI M_2_SQRTPI 表示 sqrt(Π) 和 2/sqrt(Π) 的值。


<?php
   echo "sqrt(pi) = " . sqrt(M_PI) . "\n";
   echo "M_SQRTPI = " . M_SQRTPI. "\n";
   echo "2/sqrt(pi) = " . 2/sqrt(M_PI) . "\n";
   echo "M_2_SQRTPI = " . M_2_SQRTPI . "";
?>

它将产生以下输出 -

sqrt(pi) = 1.7724538509055
M_SQRTPI = 1.7724538509055
2/sqrt(pi) = 1.1283791670955
M_2_SQRTPI = 1.1283791670955

示例 4

sqrt(-1) 未定义,因此返回 NAN。


<?php
   echo "sqrt(-1) = " . sqrt(-1) . "";
?>

它将产生以下输出 -

sqrt(-1) = NAN

预定义的数学常数

除了上述数学函数外,PHP 还有以下预定义的数学常数列表 -

常数 描述
M_PI 3.14159265358979323846 圆周率
M_E 2.7182818284590452354 Euler Number e
M_LOG2E 1.4426950408889634074 log2 e
M_LOG10E 0.43429448190325182765 log10 e
M_LN2 0.69314718055994530942 loge 2
M_LN10 M_LN10 2.30258509299404568402 loge 10 loge 10
M_PI_2 1.57079632679489661923 pi/2
M_PI_4 0.78539816339744830962 pi/4
M_1_PI 0.31830988618379067154 1/pi
M_2_PI 0.63661977236758134308 2/pi
M_SQRTPI 1.77245385090551602729 sqrt(pi)
M_2_SQRTPI 1.12837916709551257390 2/sqrt(pi)
M_SQRT2 1.41421356237309504880 sqrt(2)
M_SQRT3 1.73205080756887729352 sqrt(3)
M_SQRT1_2 0.70710678118654752440 1/sqrt(2)
M_LNPI 1.14472988584940017414 loge(pi)
M_EULER 0.57721566490153286061 Euler 常数
PHP_ROUND_HALF_UP 1 向上舍入
PHP_ROUND_HALF_DOWN 2 将两半向下舍入
PHP_ROUND_HALF_EVEN 3 将两半四舍五入为偶数
PHP_ROUND_HALF_ODD 4 将一半四舍五入为奇数
NAN NAN 不是数字
INF INF 无限