intdiv()
In questa pagina viene spiegata la funzione intdiv() in PHP, usata per eseguire la divisione intera e restituire il quoziente.
La funzione intdiv() in PHP esegue la divisione intera: divide un intero per un altro e restituisce il quoziente come numero intero, scartando il resto. È stata introdotta in PHP 7.0 per fornire un modo chiaro ed esplicito di esprimere "quante volte B entra in A" senza dover ricorrere all'operatore / e a un cast manuale.
Questa pagina spiega cosa restituisce intdiv(), come si differenzia dagli operatori / e %, come tratta i numeri negativi e i float, e come gestire gli errori che può generare.
Sintassi
intdiv(int $num1, int $num2): int$num1— il dividendo (il numero da dividere).$num2— il divisore (il numero per cui si divide).- Restituisce il quoziente
$num1 / $num2comeint, scartando la parte frazionaria.
Un Esempio di Base
10 / 3 vale 3,333…, quindi intdiv() mantiene la parte intera, 3, e scarta 0,333….
intdiv() rispetto agli Operatori / e %
L'operatore di divisione ordinario / produce sempre un float quando i numeri non si dividono esattamente, mentre intdiv() produce sempre un int. L'operatore modulo % fornisce il resto che intdiv() scarta. Insieme, intdiv() e % ricostruiscono il numero originale:
<?php
echo 10 / 3; // 3.3333333333333 (float)
echo "\n";
echo intdiv(10, 3); // 3 (int quotient)
echo "\n";
echo 10 % 3; // 1 (remainder)
echo "\n";
// quotient * divisor + remainder == dividend
echo intdiv(10, 3) * 3 + (10 % 3); // 10
?>Usa intdiv() quando hai realmente bisogno di un risultato intero, ad esempio per suddividere elementi in pagine, convertire secondi in minuti o distribuire un conteggio in bucket di dimensione fissa.
Troncamento Verso Zero
intdiv() tronca verso zero, non verso l'infinito negativo. Questo è rilevante con operandi negativi ed è una causa comune di bug quando si presume che arrotondi verso il basso:
<?php
echo intdiv(7, 2); // 3
echo "\n";
echo intdiv(-7, 2); // -3 (not -4)
echo "\n";
echo intdiv(7, -2); // -3
echo "\n";
echo intdiv(-7, -2); // 3
?>-7 / 2 vale -3,5; troncando verso zero si ottiene -3. (Se vuoi specificamente il comportamento di floor, usa floor(-7 / 2), che restituisce -4.)
Gestione degli Errori
intdiv() genera un'eccezione in due casi, entrambi da gestire con attenzione:
- La divisione per zero genera un
DivisionByZeroError. intdiv(PHP_INT_MIN, -1)genera unArithmeticError, perché il risultato matematicamente corretto è maggiore del valore massimo che un intero può contenere.
<?php
function safeIntdiv($a, $b) {
try {
return intdiv($a, $b);
} catch (DivisionByZeroError $e) {
return "Cannot divide by zero";
} catch (ArithmeticError $e) {
return "Result out of integer range";
}
}
echo safeIntdiv(20, 4); // 5
echo "\n";
echo safeIntdiv(20, 0); // Cannot divide by zero
?>Nota:
intdiv()si aspetta argomenti interi. Un float come7.9viene convertito in intero (la parte frazionaria viene scartata) prima che la divisione venga eseguita, quindiintdiv(7.9, 2)si comporta comeintdiv(7, 2). Per una divisione che mantiene la parte frazionaria dei float, usa la funzionefmod()o l'operatore/.
Conclusione
La funzione intdiv() fornisce un modo affidabile ed esplicito per eseguire la divisione intera in PHP. Ricorda che tronca verso zero, che il resto scartato è disponibile tramite %, e che può generare DivisionByZeroError e ArithmeticError. Per ulteriori informazioni sulle operazioni numeriche, consulta PHP Math, PHP Operators e PHP Numbers.