Converter um número flutuante em int em JavaScript
-
Converter Float em Int usando a função
parseInt()em JavaScript -
Converter Float em Int usando
Number.toFixed()em JavaScript - Converter flutuante em int com operadores bit a bit em JavaScript
-
Converter Float em Int usando as funções da biblioteca
Mathem JavaScript - Conclusão
Em JavaScript, temos muitas maneiras de converter float em int, conforme mostrado abaixo.
- A função
parseInt() - O método
Number.toFixed() - Conversão com operadores bit a bit
- Aplicando
ORpor 0 - Usando o operador duplo
NOT SHIFTà direita por 0
- Aplicando
- Usando funções de biblioteca
Mathem javascriptMath.floor()Math.round()Math.ceil()Math.trunc()
Converter Float em Int usando a função parseInt() em JavaScript
parseInt() é amplamente usado em JavaScript. Com esta função, podemos converter os valores de diferentes tipos de dados para o tipo inteiro. Nesta seção, veremos a conversão de um número flutuante em um número inteiro. A sintaxe de parseInt() é parseInt(<value>). O código a seguir mostra o comportamento da função.
console.log(parseInt(123.321));
console.log(parseInt(123.998));
Resultado:
123
123
Observações
- Para obter mais informações, consulte os documentos do MSN.
- Ao converter valores flutuantes,
parseInt()descarta os decimais e não os considera ao retornar a parte do número inteiro do valor flutuante. parseInt()retornaNaNcaso a conversão não seja possível. Portanto, é bom incluir uma verificaçãoisNaN()durante a conversão de valores para que o código seja seguro e não quebre.
Converter Float em Int usando Number.toFixed() em JavaScript
Number.toFixed() se comporta um pouco diferente do parseInt(). Ele arredonda o número para o valor inteiro mais próximo. Portanto, tome cuidado com o fato arredondado. Number.toFixed() arredonda o valor decimal de float menor que .5 para o valor inteiro inferior. Se o valor decimal for 0.5 ou maior, o número flutuante será arredondado para o próximo valor inteiro mais alto. A sintaxe da função Number.toFixed() é a seguinte.
numberObject.toFixed(<number of digits>);
Normalmente, precisamos passar um parâmetro para esta função que especifica o número de dígitos após o decimal na saída. Para o nosso propósito, não precisamos mencionar nenhum argumento, pois, por padrão, leva o parâmetro como sendo 0, retornando, portanto, um valor inteiro. Consulte os seguintes códigos de amostra.
console.log( (123.123).toFixed(2) );
console.log( (123.123).toFixed() );
console.log( (123.98).toFixed() );
console.log( (123.49).toFixed() );
console.log( (123.5).toFixed() );
Resultado:
123.12
123
124
123
124
Observações
- Ao contrário do método
parseInt(),Number.toFixed()não é tão famoso por extrair a parte inteira, pois faz um arredondamento do valor flutuante passado como um parâmetro. - Pode-se usar esta função para converter apenas valores flutuantes. Ao contrário da função
parseInt(), a conversão do valor da string em float não é suportada porNumber.toFixed().
Converter flutuante em int com operadores bit a bit em JavaScript
Vimos os métodos de parseInt() e Number.toFixed(). Ambos executam algumas operações internas para obter os resultados desejados. Os operadores bit a bit são eficientes, rápidos e por formante na conversão dos valores flutuantes em um inteiro quando comparados aos dois métodos. Podemos usar os seguintes operadores bit a bit para a conversão.
Aplicando OR por 0
Podemos usar o operador OR bit a bit para obter a parte do número inteiro de um número de ponto flutuante. Os operadores bit a bit funcionam no nível binário. Ele converte o número do operando em binário e, em seguida, a operação OR bit a bit é executada. Aplicar OR com 0 a qualquer número de ponto flutuante na faixa aceitável retornará a parte do número inteiro do valor de ponto flutuante. Consulte os exemplos abaixo.
console.log(123.321 | 0);
console.log(123.5432 | 0);
console.log(123.921 | 0);
console.log(216 | 0);
console.log(-321.456 | 0)
Resultado:
123
123
123
216
-321
Usando o operador duplo NOT
Outro operador bit a bit é o operador NOT, representado pelo sinal ~. Sendo um operador unário, podemos usar o operador NOT bit a bit para eliminar a parte decimal de um número flutuante. O operador NOT, no nível binário, inverte os valores dos bits binários (retornando 0 para um bit 1 e 1 para um valor de bit 0). Isso significa que se um número for representado em binário por 10110, aplicar NOT a ele resulta no valor invertido 01001. Aplicar novamente a funcionalidade NOT retorna os bits originais (10110) do número. Portanto, a aplicação do operador NOT duas vezes retorna o valor numérico e, durante o processo, não altera o número se for um inteiro. Mas para um valor flutuante, a aplicação do operador NOT duas vezes retornará apenas a parte do número inteiro do número flutuante. Os exemplos a seguir esclarecem esse fato.
console.log(~~(123.321));
console.log(~~(123.53));
console.log(~~(23.97));
console.log(~~(-23.97));
console.log(~~(-0.97));
Resultado:
123
123
23
-23
0
Deslocamento à direita em 0
Podemos aplicar o operador de deslocamento à direita bit a bit (representado por caracteres >>). Ele converterá o valor flutuante em um inteiro. Abaixo, no nível binário, o operador SHIFT bit a bit à direita desloca os bits binários do operando para a direita por uma contagem especificada pelo segundo operando. Conseqüentemente, ele ignora os bits que transbordam para a direita. Ao fazer isso, a função preserva o valor do sinal do número. Os códigos a seguir representam o funcionamento do operador SHIFT correto.
console.log(123.321 >> 0);
console.log(123.53 >> 0);
console.log(23.97 >> 0);
console.log(-23.97 >> 0);
console.log(-0.97 >> 0);
Resultado:
123
123
23
-23
0
Observações
- Operadores bit a bit são mais rápidos porque estão mais próximos da linguagem de máquina e não precisam realizar verificações ou operações adicionais como seriam feitas internamente por
parseInt()ouNumber.toFixed(). - Operadores bit a bit como
OR,NOTetc., quando aplicados em números grandes, podem dar resultados inesperados. O valor máximo suportado para obter o valor decimal truncado é2147483647(231-1). Qualquer número superior a2147483647fornecerá resultados inesperados. - Em JavaScript, os números de ponto flutuante são representados por 64 bits, com um bit reservado para preservar o valor do sinal (positivo ou negativo), 32 bits para toda a parte do número. Os operadores bit a bit operam nos números de 32 bits com sinal, ignorando o valor decimal. Portanto, obtemos a parte do número inteiro do valor flutuante.
Converter Float em Int usando as funções da biblioteca Math em JavaScript
Podemos usar a biblioteca JavaScript Math, que tem várias funções para obter inteiros de números de ponto flutuante. Ao contrário dos operadores bit a bit, eles oferecem recursos adicionais com base em requisitos como arredondamento de valores para os números mais próximos, valores de truncamento, etc. Podemos usar os métodos a seguir para essa finalidade.
Conversão com Math.floor()
A função Math.floor() arredonda o valor passado como parâmetro para o próximo valor inteiro inferior. A sintaxe de Math.floor() é Math.floor (<valor flutuante>). A seguir estão alguns exemplos que mostram o uso e como ele converte um float em um número inteiro.
console.log(Math.floor(123.321));
console.log(Math.floor(123.53));
console.log(Math.floor(23.97));
console.log(Math.floor(-23.97));
console.log(Math.floor(-0.97));
Resultado:
123
123
23 - 24 - 1
O caso de números flutuantes negativos como Math.floor(-23.97) pode parecer confuso, mas a função converte corretamente o valor para o próximo inteiro inferior, -24. Lembre-se de que quanto maior o valor numérico de um número negativo, menor é seu valor real.
Conversão com Math.round()
Ao contrário da função Math.floor(), Math.round() aproxima o valor passado nos parâmetros. Se o valor após o decimal for 5 ou maior, o número será arredondado para o próximo inteiro mais alto. Caso contrário, se o valor após o decimal for menor que 5, ele será arredondado para o número inteiro inferior. Portanto, com base no valor após o ponto decimal, a função Math.round() pode se comportar de forma semelhante às funções Math.floor() ou Math.ceil(). A seguir estão alguns exemplos com Math.round().
console.log(Math.round(123.321));
console.log(Math.round(123.53));
console.log(Math.round(23.97));
console.log(Math.round(-23.97));
console.log(Math.round(-0.97));
Resultado:
123
124
24
-24
-1
Conversão com Math.ceil()
A função Math.ceil() se comporta de forma oposta à função Math.floor(). Em vez de arredondar para o próximo inteiro inferior como em Math.floor(), Math.ceil() retorna o próximo valor inteiro mais alto. A seguir estão algumas conversões com Math.ceil().
console.log(Math.ceil(123.321));
console.log(Math.ceil(123.53));
console.log(Math.ceil(23.97));
console.log(Math.ceil(-23.97));
console.log(Math.ceil(-0.97));
Resultado:
124
124
24
-23
-0
Conversão com Math.trunc()
Como o nome sugere, a função Math.trunc() trunca o valor decimal e retorna a parte do número inteiro do valor flutuante. Este método pode ser considerado semelhante aos operadores bit a bit discutidos anteriormente. Aqui, não há arredondamento para os inteiros mais próximos. Em vez disso, ele retorna a parte do número inteiro do valor flutuante como está. A seguir estão alguns casos de uso com Math.trunc().
console.log(Math.trunc(123.321));
console.log(Math.trunc(123.53));
console.log(Math.trunc(23.97));
console.log(Math.trunc(-23.97));
console.log(Math.trunc(-0.97));
Resultado:
123
123
23
-23
-0
Conclusão
Existem várias maneiras de obter a parte inteira de um valor flutuante. Os operadores bit a bit são mais rápidos na execução, pois realizam operações no nível binário sem os requisitos de conversão ou qualquer outro processamento. parseInt(), Math.trunc() e os operadores bit a bit (OR por 0, duplo NOT, deslocamento à direita por 0) fornecem o número inteiro exato como se rasgassem o valor flutuante na vírgula decimal e retornar apenas a parte do número inteiro dela. Se estivermos interessados em processar o número flutuante para arredondá-lo ou obter o número inteiro mais próximo com base na necessidade do negócio, seria bom escolher Number.toFixed(), Math.round(), Math.ceil() e as funções Math.floor().