Tronquer le tour de nombre entier en JavaScript?
Pour un script que je suis en train d'écrire, j'ai besoin d'afficher un nombre qui a été arrondis, mais non pas la virgule ou quoi que ce soit passé. J'ai obtenu vers le bas arrondi à la troisième place, mais je ne suis pas sûr de la façon d'aller sur l'insertion de la virgule et tout le passé, comme il ne semble pas que JavaScript a un substr
fonction PHP de ne.
Toutes les recommandations?
- D'arrondi et de troncature sont 2 opérations. Qui sont que vous essayez de faire?
.substring()
est absolument une fonction en javascript.- LA MÉTHODE EST APPELÉE
.toFixed()
- n'utilisez pas de toFixed. il sera rond. par exemple (999/1000).toFixed(0) -> '1'. Comme @ryan dit dit d'utiliser les Mathématiques.trunc
- Voici utile JSPerf: jsperf.com/different-ways-to-truncate/1
Vous devez vous connecter pour publier un commentaire.
Si vous avez une chaîne, de l'analyser comme un entier:
Si vous avez un certain nombre, ECMAScript 6 offre
Math.trunc
pour complètement uniforme de troncature, déjà disponible dans Firefox 24+ et Edge:Si vous ne pouvez pas compter sur d'avoir toujours un nombre positif, bien sûr, vous pouvez simplement utiliser
Math.floor
:Et enfin, si vous avez un nombre dans [-2147483648, 2147483647], vous pouvez tronquer à 32 bits à l'aide de tout opérateur au niveau du bit.
| 0
est commun, et>>> 0
peut être utilisé pour obtenir un entier 32 bits non signé:parseInt
pour commencer. Envisager mozey de réponse lent, complexe des solutions de rechange.trunc2
est en fait la bonne option, plus il utilise la comparaison des entiers plutôt que le traitement de chaîne qui rendrait les choses beaucoup plus vite queparseInt
, avec toujours de retourner le résultat correct.substr
fonction, donc ma première option parlé de chaînes. Je suis bien conscient des problèmes liés à laparseInt
sur un certain nombre (voir mon commentaire sur mozey de la réponse, qui est en fait surtout mal).Math.trunc
être pris en charge dans internet explorer 11? SOCIÉTÉ dit il n'y a pas d'IE de soutien. J'ai aussi essayé sous IE 11 et a obtenu "l'Objet ne prend pas en charge la propriété ou de la méthode 'tronc'".Travis Pessetto réponse avec mozey de
trunc2
fonction ont été les seules réponses correctes, compte tenu du JavaScript représente très petits ou très grands nombres à virgule flottante en notation scientifique.Par exemple,
parseInt(-2.2043642353916286e-15)
ne sera pas analyser correctement entrée. Au lieu de retourner0
il sera de retour-2
.C'est la bonne (et à mon humble avis les moins fous) façon de le faire:
Je vais ajouter ma solution ici. Nous pouvons utiliser étage lorsque les valeurs sont au-dessus de 0 et de l'ceil, lorsqu'ils sont inférieurs à zéro:
Alors:
Convertir le nombre en une chaîne de caractères et jeter tout ce qui est après la virgule.
Modifier 2013-07-10
Comme l'a souligné minitech et à la réflexion de la méthode de chaîne semble un peu excessif. Afin de comparer les différentes méthodes présentées ici et d'ailleurs:
Les résultats, qui peuvent varier en fonction du matériel, sont comme suit:
Les Mathématiques.plancher /plafond méthode étant légèrement plus rapide que parseInt et mod. Chaîne des résultats médiocres par rapport aux autres méthodes.
parseInt
et la chaîne de remplacement sera de retour les réponses incorrectes pour les nombres plus grands que 999999999999999900000.parseInt
pour des raisons de simplicité, sinon de mettre en œuvretrunc3()
Utilisation
Math.floor()
:http://jsfiddle.net/J4UVV/1/
Mathématiques.trunc() fonction supprime tous les chiffres fractionnaires.
Pour nombre positif, il se comporte exactement de la même que les Mathématiques.floor():
Pour les nombres négatifs, il se comporte de même que les Mathématiques.ceil():