HOWTO · JavaScript
Come convertire un numero a virgola mobile in intero in JavaScript
Scopri come troncare o arrotondare un Number JavaScript, analizzare testo decimale ed evitare scorciatoie bitwise rischiose.
In questa pagina
JavaScript non ha tipi distinti int e float: entrambi sono normalmente rappresentati dal tipo Number. Per rimuovere la parte frazionaria di un valore numerico esistente, usa Math.trunc(), che tronca verso zero. Questa operazione si chiama troncamento verso zero:
console.log(Math.trunc(12.75));
console.log(Math.trunc(-12.75));
Uscita:
12
-12
Il metodo corretto dipende dal risultato necessario:
- Usa
Math.trunc(value)per eliminare la parte frazionaria verso zero. - Usa
Math.floor(value)oMath.ceil(value)quando conta la direzione dell’arrotondamento. - Usa
Math.round(value)per scegliere l’intero più vicino. - Usa
parseInt(text, 10)per testo decimale, non come metodo predefinito per troncare unNumber.
Troncare un numero con Math.trunc()
Math.trunc() restituisce la parte intera senza arrotondare. Per i valori positivi rimuove tutto ciò che segue il punto decimale. Per i valori negativi si sposta verso zero: -12.75 diventa -12, non -13.
const value = -12.75;
console.log(Math.trunc(12.75));
console.log(Math.trunc(value));
Uscita:
12
-12
È in genere la scelta più chiara quando il valore è già numerico e bisogna conservarne la parte intera. Un valore tra -1 e 0 può produrre uno zero negativo:
console.log(Object.is(Math.trunc(-0.5), -0));
Uscita:
true
Se l’applicazione deve distinguere -0 da 0, gestisci esplicitamente questo caso.
Scegliere floor(), ceil() o round() per arrotondare
Troncamento e arrotondamento sono operazioni diverse. Math.floor() restituisce il massimo intero minore o uguale al valore, mentre Math.ceil() restituisce il minimo intero maggiore o uguale. La differenza è importante soprattutto per i valori negativi:
const value = -12.75;
console.log(Math.floor(value));
console.log(Math.ceil(value));
console.log(Math.round(-1.5));
Uscita:
-13
-12
-1
Usa Math.floor() come limite inferiore, Math.ceil() come limite superiore e Math.round() quando serve l’intero più vicino. In caso di parità Math.round() arrotonda verso l’infinito positivo, quindi Math.round(-1.5) restituisce -1.
Analizzare il testo decimale con parseInt()
Quando la sorgente è una stringa, parseInt() può analizzarne il prefisso intero. Per il testo decimale passa 10 come base:
console.log(parseInt("12.75", 10));
console.log(Number.isNaN(parseInt("not a number", 10)));
Uscita:
12
true
parseInt() segue regole di analisi e può fermarsi davanti a un carattere non valido per la base. È quindi diverso dal troncare un numero esistente. Ad esempio, Math.trunc(Number("12.75")) è adatto quando l’input deve prima essere convertito e validato interamente. Usa Number.isNaN() o un’altra regola se l’input può essere non valido.
Evitare toFixed() e le scorciatoie bitwise per la conversione generale
Number.toFixed() è un metodo di formattazione. Arrotonda al numero di cifre decimali richiesto e restituisce una stringa, quindi non è un metodo generale per convertire in intero:
console.log(typeof (12.75).toFixed(0));
Uscita:
string
Espressioni bitwise come value | 0, ~~value e value >> 0 troncano anch’esse verso zero, ma prima convertono il valore in un intero con segno a 32 bit. I valori fuori intervallo possono ricominciare dal limite opposto:
console.log(2 ** 31 | 0);
Uscita:
-2147483648
Usa queste espressioni solo quando serve intenzionalmente una coercizione a Int32 con segno. Non sono sostituti più sicuri o chiari di Math.trunc().
Limiti da ricordare
Number usa la rappresentazione in virgola mobile IEEE 754 a doppia precisione. Gli interi sono esatti solo fino a Number.MAX_SAFE_INTEGER e Number.MIN_SAFE_INTEGER; usa Number.isSafeInteger() per l’aritmetica esatta e gestisci esplicitamente i valori non finiti:
console.log(Math.trunc(Infinity));
console.log(Math.trunc(NaN));
Uscita:
Infinity
NaN
Math.trunc() non trasforma Infinity, -Infinity o NaN in interi finiti. Valida l’input quando l’applicazione richiede un intero sicuro e finito.
Riepilogo
Per un numero JavaScript esistente, parti da Math.trunc(value) quando “intero” significa rimuovere la parte frazionaria verso zero. Scegli Math.floor(), Math.ceil() o Math.round() secondo la regola richiesta. Usa parseInt(text, 10) per testo decimale, ricorda che toFixed() produce testo formattato ed evita scorciatoie bitwise senza una coercizione a 32 bit intenzionale.