1265 votes

Comment convertir un nombre en un entier en Javascript ?

Je voudrais convertir un nombre en un entier en Javascript. En fait, je voudrais savoir comment faire tous les deux des conversions standards : en tronquant et en arrondissant. Et efficacement, sans passer par la conversion en une chaîne et l’analyse.

1854voto

moonshadow Points 28302
<pre><code></code><p><a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math">Référence de l’objet Math</a></p></pre>

320voto

Robert Koritnik Points 45499

Opérateur de bits or

Un opérateur de bits or peut être utilisé pour tronquer les chiffres à virgule flottante et il fonctionne pour les points positifs ainsi que négatifs:

function float2int (value) {
    return value | 0;
}

Résultats

float2int(3.1) == 3
float2int(-3.1) == -3
float2int(3.9) == 3
float2int(-3.9) == -3

Comparaison des performances?

J'ai créé un JSPerf test qui compare les performances entre:

  • Math.floor(val)
  • val | 0 bit à bit OU
  • ~~val bit-à-bit PAS
  • parseInt(val)

cela ne fonctionne qu'avec des nombres positifs. Dans ce cas, vous êtes sûr d'utiliser des opérations bit à bit ainsi que Math.floor fonction.

Mais si vous avez besoin de votre code pour travailler avec des aspects positifs aussi bien que négatifs, puis une opération au niveau du bit est la plus rapide (OU d'être le préféré). Cette autre JSPerf test compare la même où il est assez évident que, à cause du signe supplémentaire de vérification des Mathématiques est maintenant la plus faible des quatre.

48voto

brad Points 12878

Un double not au niveau du bit opérateur peut être utilisé pour tronquer les flotteurs. Les autres opérations que vous avez mentionnés sont disponibles par le biais Math.floor, Math.ceil, et Math.round.

> ~~2.5
2
> ~~(-1.4)
-1

Plus de détails courtoisie de James Padolsey.

41voto

Mike Points 4226

Pour tronquer :

Pour la ronde :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X