Eu estou procurando uma maneira fácil em JavaScript para verificar se um número tem uma casa decimal (para determinar se é um número inteiro). Por exemplo,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Eu estou procurando uma maneira fácil em JavaScript para verificar se um número tem uma casa decimal (para determinar se é um número inteiro). Por exemplo,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Usar o módulo funcionará:
num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5
Observe que isso se baseia no valor numérico do número, independentemente do formato. Ele trata seqüências numéricas contendo números inteiros com um ponto decimal fixo da mesma forma que números inteiros:
'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5
20.0
tem um ponto decimal programaticamente, a menos que seja expresso como uma sequência. Além disso, nenhuma das outras soluções tem um voto para baixo por não abordar que ;-)"10."
é um número inteiro e o resultado será exatamente o mesmo que"10"
ou10
.Number.isInteger () faz parte do padrão ES6 e não é suportado no IE11.
Ele retorna falsos para
NaN
,Infinity
e não numéricos argumentos enquantox % 1 != 0
retorna verdadeiro.fonte
Number.isInteger(12.0)
retornatrue
.Number.isInteger('1e3')
éfalse
mesmo queNumber.isInteger(1e3)
seja verdade. Supondo que a intenção da pergunta é encontrar valores não inteiros (em vez da presença real de um ponto decimal na representação), o valor da string '12 .0 ' deve passar, pois representa um número inteiro, mas novamenteNumber.isInteger('12.0')
éfalse
.number
é inteiro ou não. Se sua entrada é uma string, você precisa convertê-la em umanumber
primeira, por exemploparseFloat()
, via , é claro.Ou você pode simplesmente usar isso para descobrir se NÃO é um decimal:
fonte
yournumber.toString.indexOf(".")
A solução mais comum é retirar a parte inteira do número e compará-la com zero da seguinte forma:
fonte
startVal != Math.floor(startVal)
?Math.Floor
função assume um valor decimal e o maior valor decimal permitido no JavaScript é2^53 - 1
ou9007199254740991
. Como893144042145698745.3
é maior que esse máximo, a função falhará.Simples mas efetivo!
fonte
Math.floor(3.0) == 3.0
é verdadeiro,Math.floor(3.3) == 3.3
é falso// Que tal contorná-lo?
Eu sempre me sinto mal por operadores de bit em javascript-
eles quase não fazem exercício.
fonte
>>
converte o valor em um número inteiro de 32 bits assinado .Muito legal e funciona para coisas como XX.0 também! Funciona porque Math.floor () corta qualquer decimal, se tiver um, se o piso for diferente do número original, sabemos que é um decimal! E sem conversões de string :)
fonte
fonte
num= 999999999999999999999
.Number.isInteger()
é provavelmente o mais conciso. Retorna true se for um número inteiro e false se não for.fonte
fonte
quando passado um número,
parseInt()
apenas retorna o número como int:fonte
parseInt(3.0) === 3.0 // true
converta a sequência numérica em matriz, dividida por ponto decimal. Então, se a matriz tiver apenas um valor, isso significa que não há decimal na sequência.
Dessa forma, você também pode saber qual é o número inteiro e o decimal. um exemplo mais avançado seria.
fonte
Aqui está um trecho da minha biblioteca de guarda (inspirado no JavaScript eficaz de David Herman):
fonte
Você pode multiplicá-lo por 10 e, em seguida, executar uma operação / divisão de " módulo " com 10 e verificar se o resultado dessas duas operações é zero. O resultado dessas duas operações fornecerá o primeiro dígito após o ponto decimal. Se o resultado for igual a zero, o número é um número inteiro.
fonte
fonte
Você pode usar as operações bit a bit que não alteram o valor (
^ 0
ou~~
) para descartar a parte decimal, que pode ser usada para arredondar. Depois de arredondar o número, ele é comparado ao valor original:fonte
fonte
Você pode usar a seguinte função para verificar se um número tem casas decimais:
Aparentemente, alguns usuários querem explicações. Vou dividi-lo em pedaços: (num% 1)
Parêntese significa realizar essas operações primeiro. num - uma variável transmitida pela função. % - um símbolo de módulo que tenta dividir o número esquerdo pelo direito. Se houver um restante, ele retornará como um decimal. Se dividir uniformemente, retornará 0.
Então, resumindo o que temos até agora., (Num% 1) retornará:
0 quando dividido uniformemente OU #. ##### se não
0 == falso.
[ANY_NUMBER_NOT_ZERO] == verdadeiro.
Exemplos: new Boolean (0) é false new Boolean (12312.1231) é true
Outras alternativas: um usuário poderia ter tentado retornar o valor de (num% 1)., Que basicamente alcançaria a mesma coisa. Como o retorno (0) é falso e o retorno (1.213113) é verdadeiro.
Mas eu queria retornar um valor booleano. Então, como um atalho para forçar um valor a um booleano, adicionei a! símbolo antes dele.
Tantos quanto se sabe.! significa NÃO. Mas também força um valor a um valor booleano.
Desde o ! O symobol força o valor a um valor booleano e inverte seu valor. Eu uso !! para forçar o valor para um booleano e inverter seu valor de volta ao seu valor booleano original.
fonte
A função do número do cheque é número decimal ou inteiro
fonte
Talvez isso funcione para você?
Ele usa regex para verificar se há uma vírgula no número e, se não houver, adicionará a vírgula e a faixa.
fonte
Use a seguir se value for string (por exemplo, from
<input
):Eu adiciono
.toString()
ao chão para fazê-lo funcionar também nos casos em quevalue == "1."
(termina com separador decimal ou outra string). TambémMath.floor
sempre retorna algum valor para que.toString()
nunca falhe.fonte