¿Cómo sumar dos cadenas como si fueran números? [duplicar]

Resuelto Andrew asked hace 12 años • 20 respuestas

Tengo dos cadenas que contienen sólo números:

var num1 = '20',
    num2 = '30.5';

Esperaba poder sumarlos, pero en su lugar están concatenados:

num1 + num2; // = '2030.5'

¿Cómo puedo forzar que estas cadenas sean tratadas como números?

Andrew avatar Jan 24 '12 01:01 Andrew
Aceptado

Primero usaría el operador unario más para convertirlos a números.

+num1 + +num2;
ChaosPandion avatar Jan 23 '2012 18:01 ChaosPandion

Documentos de MDN para parseInt
Documentos de MDN para parseFloat

En parseInt radix se especifica como diez para que estemos en base 10. En javascript no estricto, un número antepuesto 0se trata como octal. ¡Esto obviamente causaría problemas!

parseInt(num1, 10) + parseInt(num2, 10) //base10
parseFloat(num1) + parseFloat(num2)

Consulte también la respuesta de ChaosPandion para obtener un atajo útil que utiliza un operador unario . He configurado un violín para mostrar los diferentes comportamientos.

http://jsfiddle.net/EtX6G/

var ten = '10';
var zero_ten = '010';
var one = '1';
var body = document.getElementsByTagName('body')[0];

Append(parseInt(ten) + parseInt(one));
Append(parseInt(zero_ten) + parseInt(one));
Append(+ten + +one);
Append(+zero_ten + +one);

function Append(text) {
    body.appendChild(document.createTextNode(text));
    body.appendChild(document.createElement('br'));
}
mrtsherman avatar Jan 23 '2012 18:01 mrtsherman