Os tipos de número inteiro (número inteiro) geralmente causam alguns problemas estranhos no JavaScript. Na especificação do ECMAScript, eles existem apenas no conceito:
Todos os números são números de ponto flutuante, e os números inteiros simplesmente não têm um conjunto de números sem decimais.
Neste blog, explicarei como verificar se um valor é um número inteiro.
Ecmascript 5
Existem muitas maneiras de usar no ES5. Às vezes, você pode querer usar seu próprio método: uma função de Isinteger (x), que retorna true se for um número inteiro, caso contrário, retorna falsa.
Vamos dar uma olhada em alguns exemplos.
Passe o restante da verificação
Você pode usar a operação restante (%) e calcular o restante em 1 para verificar se o restante é 0.
função isinteger (x) {return x % 1 === 0;}Gosto desse método porque é muito simples e eficaz.
> ISINTEGER (17) TRUE> ISINTEGER (17.13) FALSO
Você deve ter cuidado ao operar operações de restante, porque o resultado depende do sinal do primeiro número. Se for positivo, o resultado será positivo; Caso contrário, é negativo.
> 3,5 % 10,5> -3,5 % 1-0,5
Então, também podemos verificar 0, o que não é realmente um problema. Mas o problema é: esse método também retornará verdadeiro para não-dígitos, porque % o converterá em um número:
> isinteger ('') true> isinteger ('33') true> isinteger (false) true> isinteger (true) truePode ser resolvido por verificação simples de tipo:
função isinteger (x) {return (typeof x === 'número') && (x % 1 === 0);}Por Math.Round () Se um número for arredondado e ainda tiver o mesmo valor que o anterior, é um número inteiro. Em JavaScript, você pode verificar através do Math.Round ():
função isinteger (x) {return math.round (x) === x;}Este método também é bom
> ISINTEGER (17) TRUE> ISINTEGER (17.13) FALSO
Também pode julgar não-numérico, porque o Math.Round () sempre retorna números e === retorna verdadeiro apenas se o tipo for o mesmo.
> ISINTEGER ('') FALSOSe você deseja tornar o código mais claro, pode adicionar uma verificação de tipo (que foi o que fizemos na versão anterior). Além disso, Math.Floor () e Math.ceil () podem funcionar como Math.Round (). A verificação dos operadores de bits através de operações de bits fornece outro método de "arredondamento":
função isinteger (x) {return (x | 0) === x;}Esta solução (como outras operações de bits) possui uma desvantagem: não pode lidar com números que excedam 32 bits.
> ISINTEGER (MATH.POW (2, 32)) FALSO
A verificação do parseint () através do parseint () também fornece um método semelhante ao math.Round () para converter números em números inteiros. Vamos ver por que esse método é bom.
função isinteger (x) {return parseint (x, 10) === x;}Como a solução Math.Round (), ela pode lidar com casos não numéricos, mas também não lida com todos os números inteiros corretamente:
> ISINTEGER (1000000000000000000000000) FALSO
Por que? parseint () força o primeiro parâmetro a ser analisado em uma string antes de analisar um número inteiro. Portanto, usar esse método para converter números em números inteiros não é uma boa escolha.
> Parseint (100000000000000000000000000, 10) 1> String (10000000000000000000000000) '1e+21'
Assim como acima, o parseint () para de processar em 1 ao analisar '1e+21', por isso retorna 1. Ecmascript 6 para math.Round () Adição de arremesso, o ES6 fornece outro método para converter números em números inteiros: math.trunc (). Esta função remove a parte fracionária do número.
> Math.trunc (4.1) 4> math.trunc (4.9) 4> math.trunc (-4.1) -4> math.trunc (-4.9) -4
Além disso, o ECMAScript6 não precisa lidar com tarefas triviais que verificam números inteiros, porque vem com um número de função interno.isinteger ().