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)
Varada
fuente

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.

día solitario
fuente
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
KooiInc
fuente
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);
Sanjay
fuente
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.

dondrzzy
fuente
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.

Tushar Sagar
fuente
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í

sidonaldson
fuente