2012-02-14 12 views
6

Necesito sumar dos números ingresados ​​por el usuario. Para hacer eso, creo dos campos de entrada, recupero valores de ellos, usando .val(), en dos variables separadas y luego las agrego. El problema es que las cadenas se agregan y no los números. Por ej. 2 + 3 se convierte en 23 y no en 5. por favor sugiera qué hacer, excepto que use type = number en los cuadros de entrada.valor numérico de entrada de número por usuario en un campo de texto

+0

posible duplicado de [Javascript para convertir cadena a número?] (http://stackoverflow.com/questions/2130454/javascript-to-convert-st anillo a número) –

Respuesta

6

Puede usar parseInt (...)

Ejemplo:

var num = parseInt("2", 10) + parseInt("3", 10); 
// num == 5 
+0

¿Qué pasa si el usuario ingresa '2.5'? Incluso si supone que solo se permiten números enteros, no sugiera 'parseInt()' sin usar el segundo parámetro para especificar la base 10 con 'parseInt (" 2 ", 10)', porque de lo contrario si el usuario ingresa un cero a la izquierda (por ejemplo, "077") puede tratarse (según el navegador) como octal; si el usuario ingresa un "0x" inicial, se tratará como hexadecimal. – nnnnnn

4

Uso parseInt para convertir una cadena en un número:

var a = '2'; 
var b = '3'; 
var sum = parseInt(a,10) + parseInt(b,10); 
console.log(sum); /* 5 */ 

Tenga en cuenta que parseInt(str, rad) sólo funcionará si str realidad contiene una serie de base de rad, por lo que si desea permitir que otras bases podrás necesito verificarlos manualmente También tenga en cuenta que necesitará usar parseFloat si quiere más que enteros.

+0

¿Qué pasa si 'a' es' '2.5''? ¿Qué pasa si a es ''0x77'' o' '077'' y no ha especificado la raíz? – nnnnnn

+0

@nnnnnn: Solucionado, esa fue una de mis primeras respuestas y no estaba al tanto de los problemas de 'parseInt' en ese momento. – Zeta

0

O bien utilizar parseInt (http://www.w3schools.com/jsref/jsref_parseint.asp) o parseFloat (http : //www.w3schools.com/jsref/jsref_parsefloat.asp) para convertir a un valor numérico antes de agregar.

PD: Esta es la respuesta simple. Es posible que desee hacer un poco de validación/extracción/recorte etc.

0

Número() es la función que desea "123a" devuelve NaN

parseInt() trunca detrás letras "123a" devuelve 123

<input type="text" id="txtFld" onblur="if(!Number(this.value)){alert('not a number');}" /> 
Cuestiones relacionadas