¿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?

doubleyintestá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
intsi laifevaluabatrue.O podría usar el operador de módulo:
(d % 1) == 0fuente
Math.rint(d)?den 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;rintes mediblemente más rápido queflooroceil.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
IntegeryDouble:Para convertir
DoubleaInteger: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 unBigDecimalcuyo 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