Estoy buscando una manera fácil en JavaScript para verificar si un número tiene un lugar decimal (para determinar si es un número entero). Por ejemplo,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Estoy buscando una manera fácil en JavaScript para verificar si un número tiene un lugar decimal (para determinar si es un número entero). Por ejemplo,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Usar el módulo funcionará:
num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5
Tenga en cuenta que esto se basa en el valor numérico del número, independientemente del formato. Trata cadenas numéricas que contienen números enteros con un punto decimal fijo igual que los enteros:
'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5
20.0
tiene un punto decimal mediante programación, a menos que se exprese como una cadena. Además, ninguna de las otras soluciones obtuvo un voto negativo por no abordar eso ;-)"10."
es un número entero y el resultado será exactamente el mismo que"10"
o10
.Number.isInteger () es parte del estándar ES6 y no es compatible con IE11.
Se devuelve false para
NaN
,Infinity
y no numéricos argumentos mientrasx % 1 != 0
vuelve verdadera.fuente
Number.isInteger(12.0)
vuelvetrue
.Number.isInteger('1e3')
esfalse
, a pesar de queNumber.isInteger(1e3)
es cierto. Suponiendo que la intención de la pregunta es encontrar valores no enteros (en lugar de la presencia real de un punto decimal en la representación), entonces el valor de cadena '12 .0 ' debería pasar como representa un número entero, pero de nuevo,Number.isInteger('12.0')
esfalse
.number
es completo o no. Si su entrada es una cadena, debe convertirla en unanumber
primera, por ejemploparseFloat()
, a través de , por supuesto.O simplemente podría usar esto para averiguar si NO es un decimal:
fuente
yournumber.toString.indexOf(".")
La solución más común es quitar la parte entera del número y compararlo con cero de la siguiente manera:
fuente
startVal != Math.floor(startVal)
?Math.Floor
función toma un valor decimal y el valor decimal más grande permitido en JavaScript es2^53 - 1
o9007199254740991
. Como893144042145698745.3
es mayor que este máximo, la función fallará.Simple, pero efectivo!
fuente
Math.floor(3.0) == 3.0
es cierto,Math.floor(3.3) == 3.3
es falso// ¿Qué hay de byte-it?
Siempre me siento mal por los operadores de bits en javascript
apenas hacen ejercicio.
fuente
>>
convierte el valor en un entero de 32 bits con signo .¡Bastante genial y funciona para cosas como XX.0 también! Funciona porque Math.floor () corta cualquier decimal si tiene uno, así que si el piso es diferente del número original, ¡sabemos que es un decimal! Y sin conversiones de cadena :)
fuente
fuente
num= 999999999999999999999
.Number.isInteger()
Es probablemente el más conciso. Devuelve verdadero si es un número entero y falso si no lo es.fuente
fuente
cuando se pasa un número,
parseInt()
solo devuelve el número como int:fuente
parseInt(3.0) === 3.0 // true
convertir cadena de número a matriz, dividido por punto decimal. Entonces, si la matriz tiene solo un valor, eso significa que no hay decimal en la cadena.
De esta manera, también puede saber cuáles son realmente el número entero y el decimal. Un ejemplo más avanzado sería.
fuente
Aquí hay un extracto de mi biblioteca de guardia (inspirado en JavaScript efectivo por David Herman):
fuente
Puede multiplicarlo por 10 y luego hacer una operación / división de " módulo " con 10 , y verificar si el resultado de esas dos operaciones es cero. El resultado de esas dos operaciones le dará el primer dígito después del punto decimal. Si el resultado es igual a cero, entonces el número es un número entero.
fuente
fuente
Puede usar las operaciones bit a bit que no cambian el valor (
^ 0
o~~
) para descartar la parte decimal, que puede usarse para redondear. Después de redondear el número, se compara con el valor original:fuente
fuente
Puede usar la siguiente función para verificar si un número tiene decimales:
Aparentemente, algunos usuarios quieren explicaciones. Lo partiré en pedazos: (num% 1)
Paréntesis significa realizar esas operaciones primero. num - una variable pasada por la función. %: un símbolo de módulo que intenta dividir el número izquierdo por el derecho. Si hay un resto, lo devuelve como un decimal. Si se divide de manera uniforme, devuelve 0.
Entonces, resume lo que tenemos hasta ahora, (num% 1) devolverá:
0 cuando se divide equitativamente O #. ##### si no
0 == falso.
[ANY_NUMBER_NOT_ZERO] == verdadero.
Ejemplos: nuevo booleano (0) es falso nuevo booleano (12312.1231) es verdadero
Otras alternativas: Un usuario podría haber intentado devolver el valor de (num% 1), que básicamente lograría lo mismo. Dado que return (0) es falso y return (1.213113) es verdadero.
Pero quería devolver un valor booleano. Entonces, como atajo para forzar un valor en un valor booleano, agregué un! símbolo delante de él.
¡Todos los que puedan saber! significa NO. Pero también fuerza un valor a un valor booleano.
Desde el! symobol fuerza el valor en un valor booleano e invierte su valor. Yo suelo !! para forzar el valor a un valor booleano e invertir su valor nuevamente a su valor booleano original.
fuente
La función para el número de cheque es decimal o número entero
fuente
Tal vez esto funciona para ti?
Utiliza regex para verificar si hay una coma en el número, y si no la hay, agregará la coma y la franja.
fuente
Use el siguiente si el valor es una cadena (por ejemplo, de
<input
):Agrego
.toString()
al piso para que funcione también para casos cuandovalue == "1."
(termina con un separador decimal u otra cadena). TambiénMath.floor
siempre devuelve algún valor, por lo que.toString()
nunca falla.fuente