¿Es posible hacer esto?
double variable;
variable = 5;
/* the below should return true, since 5 is an int.
if variable were to equal 5.7, then it would return false. */
if(variable == int) {
//do stuff
}
Sé el código probablemente no va nada por el estilo, pero ¿cómo lo hace que se vaya?
double
yint
están representados en la memoria de manera diferente, y usaría uno u otro según el contexto de su manejo de memoria.Respuestas:
Esto verifica si el valor redondeado hacia abajo del doble es el mismo que el doble.
Su variable podría tener un valor int o doble y
Math.floor(variable)
siempre tiene un valor int, por lo que si su variable es igual a,Math.floor(variable)
entonces debe tener un valor int.Esto tampoco funciona si el valor de la variable es infinito o infinito negativo, por lo tanto, agrega 'mientras la variable no sea infinita' a la condición.
fuente
int
si laif
evaluabatrue
.O podría usar el operador de módulo:
(d % 1) == 0
fuente
Math.rint(d)
?d
en C y C ++.Guayaba:
DoubleMath.isMathematicalInteger
. (Divulgación: lo escribí). O, si aún no está importando guayaba,x == Math.rint(x)
es la forma más rápida de hacerlo;rint
es mediblemente más rápido quefloor
oceil
.fuente
fuente
Intenta de esta manera,
por ejemplo:
por lo tanto, 12.9 no es entero, sin embargo
por lo tanto 12.0 es entero
fuente
Aquí hay una versión para
Integer
yDouble
:Para convertir
Double
aInteger
:fuente
Considerar:
Esto se adhiere al núcleo de Java y evita una comparación de igualdad entre valores de punto flotante (
==
) que se considera incorrecto. ElisFinite()
es necesario, yarint()
que pasará a través de los valores del infinito.fuente
La mejor manera es con el operador de módulo
fuente
Aquí hay una buena solución:
fuente
(bool)
elenco?Similar a la respuesta de SkonJeet anterior, pero el rendimiento es mejor (al menos en Java):
fuente
fuente
podría intentar de esta manera: obtenga el valor entero del doble, reste esto del valor doble original, defina un rango de redondeo y pruebe si el número absoluto del nuevo valor doble (sin la parte entera) es mayor o menor que su Rango definido. si es más pequeño, puede pensar que es un valor entero. Ejemplo:
Si asigna a d el valor 33.15, el método devuelve verdadero. Para obtener mejores resultados, puede asignar valores más bajos a testRange (como 0.0002) a su discreción.
fuente
Personalmente, prefiero la solución de operación de módulo simple en la respuesta aceptada. Desafortunadamente, a SonarQube no le gustan las pruebas de igualdad con puntos flotantes sin establecer una precisión de redondeo. Por eso, hemos tratado de encontrar una solución más compatible. Aquí está:
Remainder(BigDecimal)
devuelve unBigDecimal
cuyo valor es(this % divisor)
. Si este es igual a cero, sabemos que no hay punto flotante.fuente
Mi solución simple:
fuente
Aquí hay una solución:
fuente