convertir una variable de cadena de JavaScript a decimal / dinero


114

¿Cómo podemos convertir una variable de cadena de JavaScript a decimal?

¿Existe una función como:

parseInt(document.getElementById(amtid4).innerHTML)

Respuestas:


240

Sí - parseFloat.

parseFloat(document.getElementById(amtid4).innerHTML);

Para formatear números, use toFixed:

var num = parseFloat(document.getElementById(amtid4).innerHTML).toFixed(2);

num ahora es una cadena con el número formateado con dos decimales.


1
¿Podemos hacer esa variable con 2 puntos decimales como 120,50? ahora mismo obtengo solo 120.5.
Varada

16
Para citar a @PhilipWhitehouse "Por favor, a cualquiera que lea esto en el futuro, no use la flotación para almacenar moneda. Perderá precisión y datos. Debe almacenarlo como un número entero de centavos (o centavos, etc.) y luego convertirlo antes a la salida. ". Fuente: stackoverflow.com/questions/149055/…
SSH Este

@SSHThis Hasta donde yo sé, JavaScript no tiene un tipo entero. Solo tiene un tipo de número que se almacena internamente como números de punto flotante de 64 bits. Su punto es válido para otros lenguajes que tienen tipos enteros como C #, C ++, pero no realmente para JavaScript.
Simon Brangwin

1
@SimonBrangwin Su punto sigue siendo válido, pero la semántica puede ser confusa. Lo que realmente quiere decir es "solo almacene la moneda como números enteros en javascript, ya que se almacenarán como números de punto flotante".
Josh Noe

1
Solo un recordatorio: parseFloat('22w')es 22y parseFloat('w22')esNaN
IG Pascual

65

También puede usar el Numberconstructor / función (no necesita una base y se puede usar tanto para enteros como para flotantes):

Number('09'); /=> 9
Number('09.0987'); /=> 9.0987

Alternativamente, como dijo Andy E en los comentarios, puede usar +para la conversión

+'09'; /=> 9
+'09.0987'; /=> 9.0987

Esto no es compatible con IE11
Pantalones

@Pants se trata de extensiones para el objeto integrado Number en ES6 , no de poder usarloNumber
KooiInc

11

Esto funciona:

var num = parseFloat(document.getElementById(amtid4).innerHTML, 10).toFixed(2);


2

Es bastante arriesgado confiar en las funciones de JavaScript para comparar y jugar con números. En javascript (0.1 + 0.2 == 0.3) devolverá falso debido a errores de redondeo. Utilice la biblioteca math.js.


1

Una forma fácil y corta sería usar + x Mantiene el signo intacto, así como los números decimales. La otra alternativa es usar parseFloat (x). La diferencia entre parseFloat (x) y + x es para una cadena en blanco + x devuelve 0 donde parseFloat (x) devuelve NaN.


1

Hice una pequeña función de ayuda para hacer esto y capturar todos los datos con formato incorrecto

function convertToPounds(str) { 
    var n = Number.parseFloat(str);
    if(!str || isNaN(n) || n < 0) return 0;
    return n.toFixed(2);
}

La demostración está aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.