javascript - try - parseint es6




Como converter uma string em um inteiro em JavaScript? (14)

Como converter uma string em um integer em JavaScript?


O mais rápido

var x = "1000"*1;

Teste

Aqui está uma pequena comparação de velocidade (Mac Os só) ... :)

Para o chrome 'plus' e 'mul' são mais rápidos (> 700.000,00 op / seg), o 'Math.floor' é mais lento. Para o Firefox 'plus' é mais lento (!) 'Mul' é o mais rápido (> 900.000.000 op / seg). No Safari, 'parseInt' é jejum, 'number' é mais lento (mas os resulats são bastante similares,> 13.000.000 <31.000.000). Assim, o Safari para a sequência de caracteres para int é mais de 10 vezes mais lento do que outros navegadores. Então o vencedor é ' mul ' :)

Você pode executá-lo no seu navegador por este link https://jsperf.com/casttonumber

Atualizar

Eu também testo var x = ~~"1000"; - no Chrome e no Safari é um pouco mais lento que o var x = "1000"*1 (<1%), no Firefox é um pouco mais rápido (<1%).


A maneira mais simples seria usar a função Number nativa:

var x = Number("1000")

Se isso não funcionar para você, então existem os métodos parseInt , unary plus , parseFloat com floor e Math.round .

parseInt:

var x = parseInt("1000", 10); // you want to use radix 10
    // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

unário mais se sua string já estiver na forma de um inteiro:

var x = +"1000";

se sua string é ou pode ser um float e você quer um inteiro:

var x = Math.floor("1000.01"); //floor automatically converts string to number

ou, se você estiver usando o Math.floor várias vezes:

var floor = Math.floor;
var x = floor("1000.01");

Se você é do tipo que se esquece de colocar o radix quando chama parseInt, você pode usar o parseFloat e arredondá-lo como quiser. Aqui eu uso o chão.

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

Curiosamente, Math.round (como Math.floor) fará uma string para conversão numérica, então se você quiser o número arredondado (ou se você tem um inteiro na string), esta é uma ótima maneira, talvez a minha favorita:

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)

Embora uma pergunta antiga, mas talvez isso possa ser útil para alguém.

Eu uso essa maneira de converter string para o número int

var str = "25";       // string
var number = str*1;   // number

Então, 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 para usar, por exemplo

function toNumber(str) {
   return str*1;
}


Eu postei a resposta errada aqui, desculpe. fixo.

Essa é uma pergunta antiga, mas eu amo esse truque:

~~"2.123"; //2
~~"5"; //5

O negativo bit a bit duplo cai qualquer coisa após o ponto decimal E converte-o para um formato numérico. Já me disseram que é um pouco mais rápido do que chamar funções e outras coisas, mas não estou totalmente convencido.

EDIT: Outro método que acabei de ver here (uma pergunta sobre o operador javascript >>>, que é um deslocamento à direita zero-fill) que mostra que mudando um número por 0 com este operador converte o número para um uint32 que é bom se você também quer que seja sem assinatura . Novamente, isso é convertido em um inteiro sem sinal , o que pode levar a comportamentos estranhos se você usar um número assinado.

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5

Existem duas maneiras principais de converter uma string em um número em javascript. Uma maneira é analisá-lo e a outra maneira é alterar seu tipo para um Número. Todos os truques nas outras respostas (por exemplo, unary plus) envolvem implicitamente coagir o tipo da string para um número. Você também pode fazer a mesma coisa explicitamente com a função Number.

Análise

var parsed = parseInt("97", 10);

parseInt e parseFloat são as duas funções usadas para analisar cadeias de caracteres em números. A análise parará silenciosamente se atingir um caractere que ele não reconhece, o que pode ser útil para analisar strings como "92px", mas também é um pouco perigoso, já que não lhe dará nenhum tipo de erro na entrada incorreta. Você receberá NaN a menos que a string comece com um número. O espaço em branco no início da string é ignorado. Aqui está um exemplo disso fazendo algo diferente do que você quer, e não dando nenhuma indicação de que algo deu errado:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

É uma boa prática sempre especificar o radical como o segundo argumento. Nos navegadores mais antigos, se a string começava com 0, seria interpretada como octal se a raiz não fosse especificada, o que pegou muitas pessoas de surpresa. O comportamento para hexadecimal é acionado fazendo a cadeia começar com 0x se nenhuma raiz for especificada, por exemplo, 0xff . O padrão realmente mudou com o ecmascript 5, portanto, os navegadores modernos não acionam mais o octal quando há um 0 inicial se nenhum radical tiver sido especificado. parseInt entende radix até a base 36, em cujo caso ambas as letras maiúsculas e minúsculas são tratadas como equivalentes.

Alterando o tipo de uma string para um número

Todos os outros truques mencionados acima que não usam parseInt envolvem implicitamente a coerção da string em um número. Eu prefiro fazer isso explicitamente,

var cast = Number("97");

Isso tem um comportamento diferente dos métodos de análise (embora ainda ignore os espaços em branco). É mais estrito: se não entender a string toda do que retorna NaN , você não pode usá-la para strings como 97px . Como você quer um número primitivo em vez de um objeto Number wrapper, certifique-se de não colocar um new na frente da função Number.

Obviamente, a conversão para um Número fornece um valor que pode ser um float em vez de um inteiro, portanto, se você quiser um inteiro, será necessário modificá-lo. Existem algumas maneiras de fazer isso:

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0;  // do not use for large numbers

Qualquer operador bit a bit (aqui eu fiz um bit a bit ou, mas você poderia fazer double negation como em uma resposta anterior ou um bitshift) irá converter o valor para um inteiro de 32bits, e a maioria deles irá converter para um inteiro assinado. Note que isso não vai querer que você queira para inteiros grandes . Se o inteiro não puder ser representado em 32bits, ele será quebrado.

~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

Para funcionar corretamente com números maiores, você deve usar os métodos de arredondamento

Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))

Tenha em mente que todos esses métodos entendem a notação exponencial, então 2e2 é 200 ao invés de NaN. Além disso, Number entende "Infinity", enquanto os métodos de análise não.

personalizadas

É improvável que qualquer um desses métodos faça exatamente o que você deseja. Por exemplo, geralmente eu quero um erro se a análise falhar e não precisar de suporte para Infinity, exponenciais ou espaços em branco iniciais. Dependendo do seu 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 esperado. Você quase certamente desejará usar isNaN para garantir que o número não seja NaN (normalmente, a única maneira de descobrir que a análise falhou).


Existem muitas maneiras em JavaScript para converter uma string em um valor numérico ... Tudo simples e prático, escolha a maneira como você trabalha para você:

var num = Number("999.5"); //999.5
var num = parseInt("999.5", 10); //999
var num = parseFloat("999.5"); //999.5
var num = +"999.5"; //999.5

Também qualquer operação de matemática os converte em número, por exemplo ...

var num = "999.5" / 1; //999.5
var num = "999.5" * 1; //999.5
var num = "999.5" - 1 + 1; //999.5
var num = "999.5" - 0; //999.5
var num = Math.floor("999.5"); //999
var num = ~~"999.5"; //999

Minha maneira preferida é usar o sinal + , que é a maneira elegante de converter uma string em número em JavaScript.


Na minha opinião, nenhuma resposta abrange todos os casos de borda, pois a análise de um ponto flutuante deve resultar em um erro.

function parseInteger(value) {
    if(value === '') return NaN;
    const number = Number(value);
    return Number.isInteger(number) ? number : NaN;
}
parseInteger("4")            // 4
parseInteger("5aaa")         // NaN
parseInteger("4.33333")      // NaN
parseInteger("aaa");         // NaN

O Google me deu essa resposta como resultado, então ...

Eu realmente precisei "salvar" uma string como um inteiro, para uma ligação entre C e JavaScript, então eu converto a string em um valor inteiro:

/*
    Examples:
        int2str( str2int("test") ) == "test" // true
        int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff
    Limitations:
        max 4 chars, so it fits into an integer
*/
function str2int(the_str) {
    var ret = 0;
    var len = the_str.length;
    if (len >= 1) ret += (the_str.charCodeAt(0) & 0xff) <<  0;
    if (len >= 2) ret += (the_str.charCodeAt(1) & 0xff) <<  8;
    if (len >= 3) ret += (the_str.charCodeAt(2) & 0xff) << 16;
    if (len >= 4) ret += (the_str.charCodeAt(3) & 0xff) << 24;
    return ret;
}
function int2str(the_int) {
    var tmp = [
        (the_int & 0x000000ff) >>  0,
        (the_int & 0x0000ff00) >>  8,
        (the_int & 0x00ff0000) >> 16,
        (the_int & 0xff000000) >> 24
    ];
    var ret = "";
    for (var i=0; i<4; i++) {
        if (tmp[i] == 0)
            break;
        ret += String.fromCharCode(tmp[i]);
    }
    return ret;
}

Para converter uma String em Integer, recomendo usar parseFloat e NOT parseInt. Aqui está o porquê:

Usando o parseFloat:

parseFloat('2.34cms')  //Output: 2.34
parseFloat('12.5')     //Output: 12.5
parseFloat('012.3')    //Output: 12.3

Usando parseInt:

parseInt('2.34cms')  //Output: 2
parseInt('12.5')     //Output: 12
parseInt('012.3')    //Output: 12

Portanto, se você notou parseInt descarta os valores após os decimais, enquanto o parseFloat permite que você trabalhe com números de ponto flutuante e, portanto, mais adequado se você deseja manter os valores após decimais. Use parseInt se e somente se tiver certeza de que deseja o valor inteiro.


ParseInt () e + são diferentes

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456

Também como uma nota lateral: Mootools tem a função toInt () que é usada em qualquer string nativa (ou float (ou inteiro)).

"2".toInt()   // 2
"2px".toInt() // 2
2.toInt()     // 2


Todos os acima estão corretos. Por favor, certifique-se antes de que este é um número em uma string, fazendo "typeot x === 'number'" caso contrário, ele retornará NaN

 var num = "fsdfsdf242342";
 typeof num => 'string';

 var num1 = "12423";
 typeof num1 => 'number';
 +num1 = > 12423`

podemos usar +(stringOfNumber) vez de usar parseInt(stringOfNumber)

Ex: +("21") retorna int de 21 como o parseInt("21") .

podemos usar esse operador unário "+" para analisar float também ...







parseint