J'aimerais convertir un flottant en un nombre entier en JavaScript. En fait, j'aimerais savoir comment effectuer les DEUX conversions standard : en tronquant et en arrondissant. Et de manière efficace, pas en convertissant en une chaîne de caractères et en l'analysant.
Réponses
Trop de publicités?Si l'on s'intéresse aux natifs Math
en JavaScript, vous disposez de tout un tas de fonctions pour travailler sur les nombres et les valeurs, etc...
En fait, ce que vous voulez faire est assez simple et natif en JavaScript...
Imaginez que vous avez le numéro ci-dessous :
const myValue = 56.4534931;
et maintenant si vous voulez l'arrondir au nombre le plus proche, il suffit de le faire :
const rounded = Math.floor(myValue);
et vous obtenez :
56
Si vous voulez arrondir au chiffre le plus proche, faites-le :
const roundedUp = Math.ceil(myValue);
et vous obtenez :
57
Aussi Math.round
il suffit de l'arrondir à un chiffre supérieur ou inférieur, selon celui qui est le plus proche du numéro de lot.
Vous pouvez également utiliser de ~~
derrière le nombre de flottants, qui convertira un flottant en un nombre entier.
Vous pouvez l'utiliser comme ~~myValue
...
Je tiens simplement à souligner que, d'un point de vue monétaire, il est préférable d'arrondir et non de tronquer. Il est beaucoup moins probable de se tromper d'un centime, puisque 4,999452 * 100 arrondi vous donnera 5, une réponse plus représentative.
Et en plus de cela, n'oubliez pas de arrondi du banquier Il s'agit d'un moyen de contrer le biais légèrement positif que donne l'arrondi direct - votre application financière peut l'exiger.
Si vous utilisez angularjs, la solution simple est la suivante Dans la liaison de modèle HTML
{{val | number:0}}
il convertira val en entier
passer par ce lien docs.angularjs.org/api/ng/filter/number
- Réponses précédentes
- Plus de réponses
105 votes
Si vous ne le saviez pas, tous les nombres en javascript sont des flottants. De la spécification :
8 votes
4.3.20 Type de numéro : Le type Number est un ensemble de valeurs représentant des nombres. Dans l'ECMAScript, l'ensemble de valeurs représente les valeurs IEEE 754 en double précision sur 64 bits, y compris les valeurs spéciales "Not-a-Number" (NaN), l'infini positif et l'infini négatif.
13 votes
Oui, Javascript ne dispose pas d'un type "entier" distinct, mais il n'est pas rare de devoir effectuer cette conversion. Par exemple, dans mon application, les utilisateurs ont tapé un nombre (incluant éventuellement des centimes). Je devais tronquer les centimes et les afficher avec des virgules. L'étape 1 consistait à convertir en int.
1 votes
Également utile : comparaison de la vitesse de toutes les méthodes jsperf.com/math-floor-vs-math-round-vs-parseint/33
0 votes
@mcherm pourquoi ne pas piéger le caractère décimal et ne pas autoriser son utilisation ? N'est-ce pas une meilleure expérience pour l'utilisateur ? De plus, si votre code ne permet à l'utilisateur que de saisir [0..9], vous n'avez pas besoin de convertir en entier. Cette question reste utile.
1 votes
@karl : Si j'accepte une entrée dans un champ, je pourrais être en mesure de contrôler les caractères que j'accepte, mais je pourrais effectuer toutes sortes de traitements en Javascript, et pas seulement accepter l'entrée de l'utilisateur. Même dans ce cas, je pourrais en avoir besoin pour des choses comme le support du collage.