PHP – 數學函式



為了實現數學運算,PHP 提供了數學(算術)運算子和許多數學函式。本章將透過示例解釋以下數學函式。

PHP abs() 函式

abs() 函式是 PHP 直譯器中的內建函式。此函式接受任何數字作為引數,並返回一個正值,忽略其符號。任何數字的絕對值總是正數。

abs( mixed $num)

PHP abs() 函式返回 **num** 的絕對值。如果 num 的資料型別是浮點數,則其返回型別也為浮點數。對於整數引數,返回型別為整數。

示例

請看以下示例:

<?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 直譯器中的內建函式。此函式接受任何浮點數作為引數,並將其向上舍入到下一個最高的整數。此函式始終返回一個浮點數,因為浮點數的範圍大於整數。

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 直譯器中的另一個內建函式。此函式接受任何浮點數作為引數,並將其向下舍入到下一個最低的整數。此函式始終返回一個浮點數,因為浮點數的範圍大於整數。

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

以下示例中分母為 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

以下程式碼返回字串陣列中的最大值。

<?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

以下程式碼返回字串陣列中的最小值。

<?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) 返回 xy,這與 x**y 相同。

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

第一個引數是要提升的底數。第二個引數是底數需要提升到的冪。

PHP pow() 函式返回底數的 exp 次冪。如果兩個引數都是非負整數,則結果將作為整數返回,否則將作為浮點數返回。

示例 1

下面的例子使用 pow() 函式計算 10 的 2 次冪 -

<?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 - 以下預定義常量之一。

序號 常量和描述
1

PHP_ROUND_HALF_UP

當數字是中間值時,將其四捨五入到遠離 0 的方向。因此,1.5 變為 2,-1.5 變為 -2

2

PHP_ROUND_HALF_DOWN

當數字是中間值時,將其四捨五入到接近 0 的方向。因此 1.5 變為 1,-1.5 變為 -1

3

PHP_ROUND_HALF_EVEN

將數字四捨五入到最接近的偶數。

4

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 尤拉數 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 尤拉常數
PHP_ROUND_HALF_UP 1 向上舍入
PHP_ROUND_HALF_DOWN 2 向下舍入
PHP_ROUND_HALF_EVEN 3 舍入到偶數
PHP_ROUND_HALF_ODD 4 舍入到奇數
NAN NAN 非數字
INF INF 無限大
廣告