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) o Math.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 un Number.

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.

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.