converter uma variável de string JavaScript em decimal / dinheiro

114

Como podemos converter uma variável de string JavaScript em decimal?

Existe uma função como:

parseInt(document.getElementById(amtid4).innerHTML)
Varada
fonte

Respostas:

240

Sim - parseFloat.

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

Para formatar números, use toFixed:

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

num agora é uma string com o número formatado com duas casas decimais.

solitário
fonte
1
Podemos fazer essa variável com 2 casas decimais, como 120,50? agora estou recebendo apenas 120,5.
Varada
16
Para citar @PhilipWhitehouse "Por favor, para qualquer pessoa que ler isto no futuro, não use float para armazenar moeda. Você perderá precisão e dados. Você deve armazená-los como um número inteiro de centavos (ou centavos etc.) e depois converter antes para a saída. ". Fonte: stackoverflow.com/questions/149055/…
SSH em
@SSHThis Pelo que eu sei, JavaScript não tem um tipo inteiro. Ele tem apenas um tipo de número que é armazenado internamente como números de ponto flutuante de 64 bits. Seu ponto é válido para outras linguagens que possuem tipos inteiros, como C #, C ++, mas não realmente para JavaScript.
Simon Brangwin
1
@SimonBrangwin Seu argumento ainda é válido, mas a semântica pode ser confusa. O que ele realmente quer dizer é "armazenar moeda apenas como números inteiros em javascript, pois eles serão armazenados como números de ponto flutuante".
Josh Noe
Apenas um lembrete: parseFloat('22w')é 22e parseFloat('w22')éNaN
IG Pascual
65

Você também pode usar o Numberconstrutor / função (sem necessidade de uma raiz e utilizável para inteiros e flutuantes):

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

Como alternativa, como Andy E disse nos comentários, você pode usar +para conversão

+'09'; /=> 9
+'09.0987'; /=> 9.0987
KooiInc
fonte
Isso não é compatível com o IE11
Calças de
@Pants é sobre Extensões para o objeto integrado Número no ES6 , não sobre ser capaz de usarNumber
KooiInc
11

Isso funciona:

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

É bastante arriscado contar com funções javascript para comparar e brincar com números. Em javascript (0.1 + 0.2 == 0.3) retornará falso devido a erros de arredondamento. Use a biblioteca math.js.

Dondrzzy
fonte
1

Uma maneira fácil e curta seria usar + x. Ele mantém o sinal intacto, assim como os números decimais. A outra alternativa é usar parseFloat (x). A diferença entre parseFloat (x) e + x é para uma string em branco + x retorna 0 onde parseFloat (x) retorna NaN.

Tushar Sagar
fonte
1

Fiz uma pequena função auxiliar para fazer isso e capturar todos os dados malformados

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

A demonstração está aqui

Sidonaldson
fonte