天天看點

唠嗑下PHP的求餘(取模)運算

先來看下個小案例:

$n = 8.45;
    $result = $n*100;
    echo gettype($result);
    var_dump($result);
    echo intval($n*100).'<br>';
    echo $result%100;
           

輸出:

double

float 845

844

44

看到這結果,大家是否有點兒驚奇呢?

其實,本質就是為intval((double) 845) = 944;因為我們上面用到了求餘(取模)運算符%,而取模運算符的操作數在運算之前都會轉換成整數(除去小數部分)。

此外,取模運算符 % 的結果和被除數的符号(正負号)相同。即 $a(被除數) % $b(除數) 的結果和 $a 的符号相同。接下來看幾個例子:

如:

echo (5 % 3)."\n";           
    echo (5 % -3)."\n";       
    echo (-5 % 3)."\n";          
    echo (-5 % -3)."\n";
           

輸出:

2 2 -2 -2

我們再來介紹一個跟求餘有關的Math函數fmod(),該函數主要是傳回除法的浮點數餘數。

float fmod ( float

$x

, float

$y

)

傳回被除數(

x

)除以除數(

y

)所得的浮點數餘數。餘數(r)的定義是:x = i * y + r,其中 i 是整數。如果

y

是非零值,則 r 和

x

的符号相同并且其數量值小于

y

。 其實實質就是x/y的浮點數餘數。

例子:

$x = 5;
$y = 2;
// $t = mod($x, $y);//Fatal error: Call to undefined function mod()
echo '我是fmod($x, $y)輸出的值:'.fmod($x, $y);
echo "<br>";
echo '我是$x % $y輸出的值:'.$x % $y;
           

結果:

我是fmod($x, $y)輸出的值:1

我是$x % $y輸出的值:1

$x = 5.8;
    $y = 2.5;
    // $t = mod($x, $y);//Fatal error: Call to undefined function mod()
    echo '我是fmod($x, $y)輸出的值:'.fmod($x, $y);
    echo "<br>";
    echo '我是$x % $y輸出的值:'.$x % $y;
           

結果: 我是fmod($x, $y)輸出的值:0.8

我是$x % $y輸出的值:1

注意的是,PHP裡并沒有mod()函數,使用時應注意。

小結:1、%求餘的時候,就是先把運算之前的被除數和除數都轉換成整數(除去小數部分)

2、fmod()就類似于數學裡面的求餘運算。