Practical PHP Programming

其他的数学转换函数

number abs ( number value)
float sqrt ( float value)
number pow ( number base, number exponent)
float hypot ( float num1, float num2)

在非三角函数方面,对数字进行操作时有几个关键的函数,其中最重要的是abs()sqrt()pow()

abs()是最基本的函数,它返回你传入参数的绝对值。绝对值的含义,就是说如果你传入的是正数则保持不变,传入的是负数,则返回其对应的正数值。

<?php
    abs(50);
    abs(-12);
?>

第一行返回50,第二行返回12。abs()可以将整型或浮点型作为其参数并返回相同类型的值:

<?php
    abs(50.1);
    abs(-12.5);
?>

第一行返回50.1,第二行返回12.5。如你所见,不管是整型还是浮点型,abs()函数都能处理。如果你不知道为什么要用abs(),想一下,如果用PHP脚本来处理类似“你想买多少件T-Shirt”这种问题的时候,你需要自己写代码来检查输入的值是否小于0,如果小于0,则需要有适当的警告。而如果直接用abs()处理一下就简单多了,它可以保证是正数,之后就可以将返回的结果添加购物车进行处理了。

接下来说sqrt(),它只接受一个参数,返回这个参数的平方根。用起来也非常方便:

<?php
    print sqrt(25);
    print sqrt(26);
?>

第一行输出5,第二行输出5.0990195135928。

第三个关键的函数是pow(),有两个参数,一个底数,一个指数。也就是说,如果第二个参数是2,则返回第一个参数的平方;第二个参数是3,返回第一个参数的立方,就像这样:

<?php
    print pow(10,2); // 100
    print pow(10,3); // 1000
    print pow(10,4); // 10000
    print pow(-10, 4); // 10000
?>

前三行的结果分别是10*1010*10*1010*10*10*10。注意第四行第一个参数是-10,别担心,pow()第一个参数可正可负。第四行输出的结果是正数,这是因为第二个参数为偶数,“负负得正”。

pow()的第二个参数也可以是负数,也就是得到负数次幂。例如,pow(10, -1)得到0.1,pow(10, -2)得到0.01,pow(10, -3)为0.001,以此类推。

使用pow()的时候有个难点,就是当-1和0.5作为pow()的参数时——这不是PHP的bug,而是我们数字系统就是这么构建的。如果你尝试计算一个负数的平方根你就知道这个是不可能的了。假设Y的平方根是X,X乘以X得到Y。如果Y是负数,那么X也应该师傅的。但是我们又知道负负得正,则Y应该是正的。因此,求负数的平方根是不可能的。传递给pow()的参数是0.5的时候,就相当于是在计算第一个参数的平方根。而负数是没有平方根的,所以当第一个参数为负,第二个参数是0.5的时候会造成错误。

即便你不知道这些数学理论也没什么关系,pow()通常在正数范围内使用,例如直接调用函数来计算8*8*8*8等。

另外一个你可能时不时用到的函数是hypot()hypot()有两个参数,假设分别为XY,则hypot()返回的是sqrt((X * X) + (Y * Y))。如果你知道毕达哥拉斯定理(中文名:勾股定理),你就会知道hypot()是用来计算向量的长度(或三角形的斜边,这取决于你如何看待它)的。