Como faço para converter uma string em um número inteiro em JavaScript?
javascript
string
integer
data-conversion
cubuspl42
fonte
fonte
Respostas:
A maneira mais simples seria usar a
Number
função nativa :Se isso não funcionar para você, existem os métodos parseInt , unary plus , parseFloat with floor e Math.round .
parseInt:
unary mais se sua string já estiver na forma de um número inteiro:
se sua string é ou pode ser uma flutuação e você deseja um número inteiro:
ou, se você estiver usando o Math.floor várias vezes:
Se você é do tipo que esquece de colocar o radical quando chama parseInt, pode usar o parseFloat e arredondá-lo como quiser. Aqui eu uso chão.
Curiosamente, Math.round (como Math.floor) fará uma conversão de string para número; portanto, se você quiser que o número seja arredondado (ou se você tiver um número inteiro na string), essa é uma ótima maneira, talvez o meu favorito:
fonte
'4'>>0
e'4'>>>0
.parseInt
eparseFloat
alegremente aceita cartas.Number
Retorna apenasNaN
consistentemente.NaN
para cada valor que não seja exatamente um número inteiro. Portanto nenhum desses funcionar comoNumber('2.2')
coage a2
eNumber('')
coagir a 0.Tente a função parseInt:
Mas há um problema. Se você tentar converter "010" usando a função parseInt, ele detectará como número octal e retornará o número 8. Portanto, é necessário especificar um radical (de 2 a 36). Nesse caso, base 10.
Exemplo:
Observe que
parseInt
ignora dados inválidos após analisar qualquer coisa válida.Este guia será analisado como 51:
fonte
parseInt('0asdf', 10)
produz0
.Existem duas maneiras principais de converter uma string em um número em javascript. Uma maneira é analisá-lo e a outra maneira é mudar seu tipo para um número. Todos os truques nas outras respostas (por exemplo, unary plus) envolvem coagir implicitamente o tipo da string a um número. Você também pode fazer o mesmo explicitamente com a função Number.
Análise
parseInt e parseFloat são as duas funções usadas para analisar seqüências de caracteres em números. A análise será interrompida silenciosamente se atingir um caractere que não reconheça, o que pode ser útil para analisar seqüências de caracteres como "92px", mas também é um pouco perigoso, pois não causará nenhum tipo de erro em entradas incorretas. retornará NaN a menos que a sequência comece com um número. O espaço em branco no início da string é ignorado. Aqui está um exemplo de como fazer algo diferente do que você deseja e sem dar indicação de que algo deu errado:
É uma boa prática sempre especificar a raiz como o segundo argumento. Em navegadores mais antigos, se a sequência iniciasse com um 0, seria interpretada como octal se o radical não fosse especificado, o que pegaria muita gente de surpresa. O comportamento do hexadecimal é acionado com o início da cadeia com 0x, se nenhuma raiz for especificada, por exemplo
0xff
. O padrão realmente mudou com o ecmascript 5, de modo que os navegadores modernos não acionam mais octal quando há um 0 inicial, se nenhuma raiz foi especificada. parseInt entende radixes até a base 36; nesse caso, as letras maiúsculas e minúsculas são tratadas como equivalentes.Alterando o tipo de uma seqüência de caracteres para um número
Todos os outros truques mencionados acima que não usam parseInt envolvem coagir implicitamente a string em um número. Eu prefiro fazer isso explicitamente,
Isso tem um comportamento diferente dos métodos de análise (embora ainda ignore o espaço em branco). É mais rigoroso: se ele não entende toda a string do que ela retorna
NaN
, então você não pode usá-la para strings como97px
. Como você deseja um número primitivo em vez de um objeto de invólucro de número, certifique-se de não colocarnew
na frente da função Número.Obviamente, a conversão para um número fornece um valor que pode ser um número flutuante em vez de um número inteiro; portanto, se você quiser um número inteiro, precisará modificá-lo. Existem algumas maneiras de fazer isso:
Qualquer operador bit a bit (aqui eu fiz bit a bit ou, mas você também pode fazer uma dupla negação como em uma resposta anterior ou em um deslocamento de bits) converterá o valor em um número inteiro de 32 bits e a maioria deles converterá em um número inteiro assinado. Observe que isso não será o desejado para números inteiros grandes . Se o número inteiro não puder ser representado em 32 bits, ele será quebrado.
Para funcionar corretamente com números maiores, você deve usar os métodos de arredondamento
Tenha em mente que todos esses métodos entender a notação exponencial, por isso
2e2
é200
melhor que NaN. Além disso, o Number entende "Infinito", enquanto os métodos de análise não.personalizadas
É improvável que um desses métodos faça exatamente o que você deseja. Por exemplo, geralmente eu desejaria um erro se a análise falhar e não preciso de suporte para Infinito, exponencial ou espaço em branco à esquerda. Dependendo do seu caso de uso, às vezes faz sentido escrever uma função de conversão personalizada.
Sempre verifique se a saída de Number ou um dos métodos de análise é o tipo de número que você espera. Você quase certamente desejará usar
isNaN
para garantir que o número não seja NaN (geralmente a única maneira de descobrir que a análise falhou).fonte
97,8,00
e similar ou não. Um truque simples é fazer um.replace(/[^0-9]/g, "")
que removerá todos os dígitos não da sua string e, depois, fará a conversão. Isto naturalmente irá ignorar todos os tipos de cordas loucas que você provavelmente deve erro em vez de apenas parse ....replace(/[^0-9.]/g, "")
, caso contrário "1.05" se tornará "105".var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
, estamos recebendo umstring
(por causa do.toFixed
método) em vez de umnumber
(número inteiro). Se queremos que o número inteiro arredondado provavelmente é melhor usar apenasMath.round("97.654");
ParseInt () e + são diferentes
fonte
Embora seja uma pergunta antiga, mas talvez isso possa ser útil para alguém.
Eu uso essa maneira de converter string para número
intPortanto, ao multiplicar por 1, o valor não muda, mas js retorna automaticamente um número.
Mas, como é mostrado abaixo, isso deve ser usado se você tiver certeza de que
str
é um número (ou pode ser representado como um número); caso contrário, ele retornará NaN - não um número.você pode criar uma função simples de usar, por exemplo
fonte
O mais rápido
Teste
Aqui está uma pequena comparação de velocidade (apenas Mac OS) ... :)
Para chrome 'plus' e 'mul' são os mais rápidos (> 700.000,00 op / s), 'Math.floor' é o mais lento. Para o Firefox, 'plus' é o mais lento (!) 'Mul' é o mais rápido (> 900.000.000 op / s). No Safari, 'parseInt' é jejum, 'número' é mais lento (mas os resultados são bastante semelhantes,> 13.000.000 <31.000.000). Portanto, o Safari para converter strings para int é 10 vezes mais lento que outros navegadores. Então o vencedor é ' mul ' :)
Você pode executá-lo no seu navegador por este link https://jsperf.com/js-cast-str-to-number/1
Atualizar
Eu também testo
var x = ~~"1000";
- no Chrome e Safari é um pouco mais lento quevar x = "1000"*1
(<1%), no Firefox é um pouco mais rápido (<1%). Eu atualizo a imagem acima e testeifonte
Tente parseInt.
fonte
Eu postei a resposta errada aqui, desculpe. fixo.
Esta é uma pergunta antiga, mas eu amo esse truque:
O negativo bit a bit duplo cai qualquer coisa após o ponto decimal E o converte em um formato numérico. Foi-me dito que é um pouco mais rápido do que chamar funções e outros enfeites, mas não estou totalmente convencido.
EDIT: Outro método que acabei de ver aqui (uma pergunta sobre o operador javascript >>>, que é um deslocamento à direita com preenchimento zero), que mostra que mudar um número por 0 com esse operador converte o número em um uint32, o que é bom se você também quer sem sinal . Novamente, isso se converte em um número inteiro não assinado , o que pode levar a comportamentos estranhos se você usar um número assinado.
fonte
Cuidado se você usar parseInt para converter um float em notação científica! Por exemplo:
vai resultar em
ao invés de
fonte
parseInt
não funcionaria corretamente para um flutuador.parseFloat
funciona corretamente neste caso.Para converter uma String em Inteiro, eu recomendo usar parseFloat e NOT parseInt. Aqui está o porquê:
Usando parseFloat:
Usando parseInt:
Portanto, se você notou parseInt descarta os valores após as casas decimais, enquanto parseFloat permite trabalhar com números de ponto flutuante e, portanto, mais adequado se você deseja reter os valores após casas decimais. Use parseInt se e somente se tiver certeza de que deseja o valor inteiro.
fonte
Também como uma observação lateral: Mootools tem a função toInt () que é usada em qualquer string nativa (ou flutuante (ou inteiro)).
fonte
SyntaxError
, você deve usar um ponto duplo, por exemplo:2..toInt();
o primeiro ponto encerrará a representação de umNumber
literal e o segundo ponto é o acessador da propriedade.Veja o exemplo abaixo. Isso ajudará a esclarecer sua dúvida
usando a função parseint Ele dará apenas o número inteiro presente e não a string
fonte
podemos usar em
+(stringOfNumber)
vez de usarparseInt(stringOfNumber)
Ex:
+("21")
retorna int de 21 como oparseInt("21")
.podemos usar esse operador "+" unário também para analisar float ...
fonte
+
?parseInt
é. Uma implementação comum éconst myNumber = +myNumberAsAString
semelhante a um padrão+=
ou=+
operador à primeira vista. Além disso, se usado incorretamente, pode levar a erros de concatenação. Essa solução é baseada no fato de que 0 é assumido como o lado esquerdo quando nenhum número é fornecido.Tente
str - 0
converterstring
paranumber
.Aqui estão dois links para comparar o desempenho de várias maneiras de converter string em int
https://jsperf.com/number-vs-parseint-vs-plus
http://phrogz.net/js/string_to_number.html
fonte
'1'
será convertido em1
porToNumber
, em seguida,1 - 0
seria1
Existem várias maneiras no JavaScript de converter uma string em um valor numérico ... Tudo simples e prático, escolha a maneira que funciona para você:
Além disso, qualquer operação matemática os converte em número, por exemplo ...
Minha maneira preferida é usar
+
sign, que é a maneira elegante de converter uma string em número em JavaScript.fonte
O Google me deu essa resposta como resultado, então ...
Na verdade, eu precisava "salvar" uma string como um número inteiro, para uma ligação entre C e JavaScript, então eu converti a string em um valor inteiro:
fonte
int2str
função será interrompida se um byte for 0, que pode ser um elemento legítimo dentro do valor, portanto oif
...break
deve ser removido para que você retorne um valor completo de 4 bytes.Na minha opinião, nenhuma resposta cobre todos os casos extremos, pois a análise de um flutuador deve resultar em um erro.
fonte
parseInteger
, nãoparseNumber
. Eu acho que todas as soluções são uma solução alternativa, já que o JS não suporta números inteiros e flutuantes como tipos separados. Poderíamos retornar emnull
vez deNaN
, se Not A Number for enganoso.Aqui está a solução mais fácil
Solução mais fácil
fonte
Todos os acima estão corretos. Antes, certifique-se de que este é um número em uma string fazendo "typeot x === 'number'"; caso contrário, ele retornará NaN
fonte
var num1 = "12423"; typeof num1;
retornastring
.Outra opção é dobrar o valor XOR consigo mesmo:
Isso produzirá:
fonte
Eu adicionei apenas um mais (+) antes da string e essa foi a solução!
Espero que ajude ;)
fonte
Somando a multiplicação de dígitos com seu respectivo poder de dez:
ou seja: 123 = 100 + 20 + 3 = 1 * 100 + 2 + 10 + 3 * 1 = 1 * (10 ^ 2) + 2 * (10 ^ 1) + 3 * (10 ^ 0)
}
fonte
fonte
Eu uso isso
Dessa forma, eu sempre recebo um retorno.
fonte
A maneira mais segura de garantir que você obtenha um número inteiro válido:
Exemplos:
fonte
fonte
você pode usar plus, por exemplo =>
var personAge = '24'; var personAge1 = (+ personAge)
então você pode ver o tipo de pessoaA idade é o número
fonte