PHP 數學運算

在本教程中,你將學習如何在 PHP 中執行數學運算。

PHP 數學運算

PHP 有幾個內建函式可以幫助你執行從簡單的加法或減法到高階計算的任何操作。你已經在 PHP 運算子 章節中看到了如何執行基本的數學運算。讓我們看看另外一個例子:

<?php
echo 7 + 3; // 0utputs: 10
echo 7 - 2; // 0utputs: 5
echo 7 * 2; // 0utputs: 14
echo 7 / 2; // 0utputs: 3.5
echo 7 % 2; // 0utputs: 1
?>

每個數學運算都有一定的優先順序; 通常在加法和減法之前執行乘法和除法。但是,括號可以改變這個優先順序; 無論操作的優先順序如何,始終首先計算括在括號中的表示式,如以下示例所示:

<?php
echo 5 + 4 * 10;         // 0utputs: 45
echo (5 + 4) * 10;       // 0utputs: 90
echo 5 + 4 * 10 / 2;     // 0utputs: 25
echo 8 * 10 / 4 - 2;     // 0utputs: 18
echo 8 * 10 / (4 - 2);   // 0utputs: 40
echo 8 + 10 / 4 - 2;     // 0utputs: 8.5
echo (8 + 10) / (4 - 2); // 0utputs: 9
?>

在下一節中,我們將介紹一些在執行數學運算時最常用的內建 PHP 函式。

數字的絕對值

可以使用函式找到整數浮點數的絕對值 abs() ,如以下示例所示:

<?php
echo abs(5);    // 0utputs: 5 (integer)
echo abs(-5);   // 0utputs: 5 (integer)
echo abs(4.2);  // 0utputs: 4.2 (double/float)
echo abs(-4.2); // 0utputs: 4.2 (double/float)
?>

如你所知,如果給定的數字為負數,則返回的值為正數。但是,如果數字是正數,則此函式只返回數字。

向上或向下舍入分數值

ceil() 函式可用於將小數值舍入到下一個最高整數值,而 floor() 函式可用於將小數值向下舍入到下一個最小整數值,如以下示例所示:

<?php
// Round fractions up
echo ceil(4.2);    // 0utputs: 5
echo ceil(9.99);   // 0utputs: 10
echo ceil(-5.18);  // 0utputs: -5
 
// Round fractions down
echo floor(4.2);    // 0utputs: 4
echo floor(9.99);   // 0utputs: 9
echo floor(-5.18);  // 0utputs: -6
?>

數字的平方根

你可以使用 sqrt() 函式計算正數的平方根。此函式對負數返回 NAN 的特殊值。這是一個例子:

<?php
echo sqrt(9);   // 0utputs: 3
echo sqrt(25);  // 0utputs: 5
echo sqrt(10);  // 0utputs: 3.1622776601684
echo sqrt(-16); // 0utputs: NAN
?>

生成隨機數

rand() 函式可用於生成隨機數。你可以選擇通過傳遞 minmax 引數來指定範圍,如以下示例所示:

<?php
// Generate some random numbers
echo rand() . "<br>";
echo rand() . "<br>";
 
// Generate some random numbers between 1 and 10 (inclusive)
echo rand(1, 10) . "<br>";
echo rand(1, 10) . "<br>";
?>

如果 rand() 被呼叫時沒有給定 minmax 則函式返回 0getrandmax() 之間的偽隨機數。該 getrandmax() 函式顯示最大可能的隨機值,在 Windows 平臺上僅為 32767。因此,如果你需要大於 32767 的範圍,需要指定 minmax 引數。

將十進位制數轉換為二進位制數和二進位制轉換為十進位制數

decbin() 函式用於將十進位制數轉換為二進位制數。而它的對應的 bindec() 函式將二進位制轉換為十進位制。

<?php
// Convert Decimal to Binary 
echo decbin(2);    // 0utputs: 10  
echo decbin(12);   // 0utputs: 1100  
echo decbin(100);  // 0utputs: 1100100
 
// Convert Binary to Decimal
echo bindec(10);       // 0utputs: 2 
echo bindec(1100);     // 0utputs: 12  
echo bindec(1100100);  // 0utputs: 100
?>

將十進位制數轉換為十六進位制和其相反操作

dechex() 函式用於將十進位制數轉換為十六進位制表示。而 hexdec() 函式用於將十六進位制字串轉換為十進位制數字。

<?php
// Convert decimal to hexadecimal 
echo dechex(255);  // 0utputs: ff
echo dechex(196);  // 0utputs: c4
echo dechex(0);    // 0utputs: 0
 
// Convert hexadecimal to decimal
echo hexdec('ff');  // 0utputs: 255
echo hexdec('c4');  // 0utputs: 196
echo hexdec(0);     // 0utputs: 0
?>

將十進位制數轉換為八進位制和其相反操作

decoct() 函式用於將十進位制數轉換為八進位制表示。而 octdec() 函式用於將八進位制數轉換為十進位制數。

<?php
// Convert decimal to octal 
echo decoct(12);   // 0utputs: 14
echo decoct(256);  // 0utputs: 400
echo decoct(77);   // 0utputs: 115
 
// Convert octal to decimal
echo octdec('14');   // 0utputs: 12
echo octdec('400');  // 0utputs: 256
echo octdec('115');  // 0utputs: 77
?>

將數字從一個基數系統轉換為另一個基數系統

base_convert() 函式可用於將數字從一個基數系統轉換為另一個基數系統。例如,你可以將十進位制(基數 10) 轉換為二進位制(基數 2),十六進位制(基數 16)轉換為八進位制(基數 8),八進位制轉換為十六進位制,十六進位制轉換為十進位制,依此類推。

此函式接受三個引數:要轉換的數字,它當前所在的基數以及要轉換的基數。基本語法如下:

base_convert(number, frombase, tobase); 

這裡,number 可以是整數,也可以是表示整數的字串。 frombasetobase 在 2 和 36 之間,包括兩端的 2 和 36。基數高於 10 的數字數字將用字母 az 表示,其中 a 表示 10,b 表示 11,z 表示 35.這是一個簡單的示例,用於說明此函式的工作原理:

<?php
// Convert decimal to binary
echo base_convert('12', 10, 2);  // 0utputs: 1100
// Convert binary to decimal
echo base_convert('1100', 2, 10);  // 0utputs: 12
 
// Convert decimal to hexadecimal
echo base_convert('10889592', 10, 16);  // 0utputs: a62978
// Convert hexadecimal to decimal
echo base_convert('a62978', 16, 10);  // 0utputs: 10889592
 
// Convert decimal to octal
echo base_convert('82', 10, 8);  // 0utputs: 122
// Convert octal to decimal
echo base_convert('122', 8, 10);  // 0utputs: 82
 
// Convert hexadecimal to octal
echo base_convert('c2c6a8', 16, 8);  // 0utputs: 60543250
// Convert octal to hexadecimal
echo base_convert('60543250', 8, 16);  // 0utputs: c2c6a8
 
// Convert octal to binary
echo base_convert('42', 8, 2);  // 0utputs: 100010
// Convert binary to octal
echo base_convert('100010', 2, 8);  // 0utputs: 42
 
// Convert hexadecimal to binary
echo base_convert('abc', 16, 2);  // 0utputs: 101010111100
// Convert binary to hexadecimal
echo base_convert('101010111100', 2, 16);  // 0utputs: abc
?>

注意: base_convert() 函式將始終返回字串值。如果返回的值在基數 10 中,則結果字串可以在計算中用作數字字串,PHP 將在執行計算時將其轉換為數字。