web-dev-qa-db-fra.com

Conversion de javascript à int

J'ai le JS suivant incorporé dans une page:

var round = Math.round;
var id = $(this).attr("id");

var len = id.length;
var indexPos = len -1; // index of the number so that we can split this up and used it as a title

var pasType = id.substring(0, indexPos); // adult, child or infant
var ind = round(id.substring(indexPos)); // converts the string index to an integer
var number = (id.substring(indexPos) + 1); // creates the number that will go in the title
window.alert(number);

id sera quelque chose comme adulte0, et je dois prendre cette chaîne et la scinder en adulte et 0 - cette partie fonctionne bien.

Le problème survient lorsque j'essaie d'incrémenter le 0. Comme vous pouvez le voir, j'utilise Math.round pour le convertir en entier, puis j'ajoute 1 - je m'attends à ce que 0 soit égal à 1 après cela. Cependant, il ne semble pas le convertir en entier, car je reçois 01, pas 1. Lorsque je teste ceci avec adult1, l'alerte que je reçois est 11.

J'utilise this question pour référence, et j'ai aussi essayé var number += id.substring(indexPos);, ce qui casse le JS (unexpected identifier '+=')

Est-ce que quelqu'un sait ce que je fais mal? Existe-t-il une meilleure façon de le faire?

18
Skytiger

La fonction parseInt() analyse une string et renvoie une integer, 10 étant le Radix ou la Base [DOC]

var number = parseInt(id.substring(indexPos) , 10 ) + 1;
30
Charaf JRA

Ceci est lié à l'opérateur + in de JavaScript - si un nombre et une chaîne sont "additionnés", le nombre est converti en une chaîne:

0 + 1; //1
'0' + 1; // '01'

Pour résoudre ce problème, utilisez l'opérateur unaire + ou parseInt():

+'0' + 1; // 1
parseInt('0', 10) + 1; // 1

L'opérateur unaire + le convertit en un nombre (toutefois, s'il s'agit d'une décimale, il conservera les décimales), et parseInt() se passe d'explication (se convertit en nombre, en ignorant les décimales).

Le deuxième argument est nécessaire pour que parseInt() utilise la base correcte lorsque les 0 premiers sont placés:

parseInt('010'); // 8 in older browsers, 10 in newer browsers
parseInt('010', 10); // always 10 no matter what

Il existe également parseFloat() si vous devez convertir les décimales en chaînes en valeur numérique - + peut le faire aussi, mais cela se comporte légèrement différemment: c'est une autre histoire cependant.

6
Qantas 94 Heavy

JS pensera que le 0 est une chaîne, ce qu'il est en réalité, pour le convertir en int, utilisez la fonction: parseInt (), comme suit:

var numberAsInt = parseInt(number, 10);  
// Second arg is radix, 10 is decimal.

Si le nombre ne peut pas être converti en un entier, il retournera NaN. Je recommanderais donc de vérifier cela aussi dans le code utilisé en production ou du moins si vous n'êtes pas sûr à 100% de l'entrée.

3
Jite

Utilisez parseInt ():

var number = (parseInt(id.substring(indexPos)) + 1);` // creates the number that will go in the title
2
juju

Bien que parseInt soit la fonction officielle pour ce faire, vous pouvez obtenir la même chose avec ce code:

number*1

L'avantage est que vous enregistrez certains caractères, ce qui peut permettre d'économiser de la bande passante si votre code prend en charge de nombreuses conversations de ce type.

2
Alexander Jank

Si vous êtes sûr que si chaîne (indexof) est un nombre, vous pouvez le faire comme suit

var number = Number(id.substring(indexPos)) + 1;

Sinon, je suggère de vérifier si la fonction Number est évaluée correctement.

2
user1203684

Convertir par Number Class: -

Par exemple: 

var n = Number("103");
console.log(n+1)

Sortie: 104

Remarque: - Number est class. Lorsque nous passons une chaîne, le constructeur de Number class la convertira. 

2
Arshid KV