先來看下個小案例:
$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()就類似于數學裡面的求餘運算。