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 将在执行计算时将其转换为数字。