JavaScript Remainder / Modulo (%)

Esempio

L'operatore rimanente / modulo ( % ) restituisce il resto dopo la divisione (intero).

console.log( 42 %  10); //  2
console.log( 42 % -10); //  2
console.log(-42 %  10); // -2
console.log(-42 % -10); // -2
console.log(-40 %  10); // -0
console.log( 40 %  10); //  0

Questo operatore restituisce il resto rimasto quando un operando viene diviso per un secondo operando. Quando il primo operando è un valore negativo, il valore restituito sarà sempre negativo e viceversa per i valori positivi.

Nell'esempio sopra, 10 può essere sottratto quattro volte da 42 prima che non ci sia abbastanza da sottrarre di nuovo senza cambiare segno. Il resto è quindi: 42 - 4 * 10 = 2 .

L'operatore rimanente può essere utile per i seguenti problemi:

  1. Verifica se un numero intero è (non) divisibile per un altro numero:

     x % 4 == 0 // true if x is divisible by 4
     x % 2 == 0 // true if x is even number
     x % 2 != 0 // true if x is odd number
    

    Poiché 0 === -0 , funziona anche per x <= -0 .

  2. Implementare l'incremento / decremento ciclico del valore all'interno dell'intervallo [0, n) .

Supponiamo di dover incrementare il valore intero da 0 a (ma non incluso) n , quindi il valore successivo dopo n-1 diventa 0 . Questo può essere fatto da tale pseudocodice:

var n = ...; // given n
var i = 0;
function inc() {
    i = (i + 1) % n;
}
while (true) {
    inc();
    // update something with i
}

Ora generalizza il problema precedente e supponiamo di dover consentire sia di incrementare che di decrementare quel valore da 0 a (non incluso) n , quindi il valore successivo dopo n-1 diventa 0 e il valore precedente prima di 0 diventa n-1 .

var n = ...; // given n
var i = 0;
function delta(d) { // d - any signed integer
    i = (i + d + n) % n; // we add n to (i+d) to ensure the sum is positive
}

Ora possiamo chiamare la funzione delta() passando qualsiasi numero intero, sia positivo che negativo, come parametro delta.


Usare il modulo per ottenere la parte frazionaria di un numero

 var myNum = 10 / 4;       // 2.5
 var fraction = myNum % 1; // 0.5
 myNum = -20 / 7;          // -2.857142857142857
 fraction = myNum % 1;     // -0.857142857142857