Est-il possible de faire cela?
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
}
Je sais que le code ne va probablement pas quelque chose comme ça, mais comment n'aller?
double
etint
sont représentés en mémoire différemment, et vous utiliseriez l'un ou l'autre en fonction du contexte de votre gestion de la mémoire.Réponses:
Cela vérifie si la valeur arrondie du double est la même que celle du double.
Votre variable peut avoir une valeur int ou double et a
Math.floor(variable)
toujours une valeur int, donc si votre variable est égale àMath.floor(variable)
alors elle doit avoir une valeur int.Cela ne fonctionne pas non plus si la valeur de la variable est infinie ou infinie négative, ajoutant donc «tant que la variable n'est pas infinie» à la condition.
la source
int
if theif
évalue àtrue
.Ou vous pouvez utiliser l'opérateur modulo:
(d % 1) == 0
la source
Math.rint(d)
?d
en C et C ++.Goyave:
DoubleMath.isMathematicalInteger
. (Divulgation: je l'ai écrit.) Ou, si vousx == Math.rint(x)
n'importez pas déjà Guava, c'est le moyen le plus rapide de le faire;rint
est sensiblement plus rapide quefloor
ouceil
.la source
la source
Essayez de cette façon,
par exemple:
donc 12,9 n'est pas un entier, néanmoins
donc 12,0 est un entier
la source
Voici une version pour
Integer
etDouble
:Pour convertir
Double
enInteger
:la source
Considérer:
Cela colle au noyau Java et évite une comparaison d'égalité entre les valeurs en virgule flottante (
==
) qui est considérée comme mauvaise. LeisFinite()
est nécessaire, tout comme lesrint()
valeurs infinies.la source
Le meilleur moyen est d'utiliser un opérateur de module
la source
Voici une bonne solution:
la source
(bool)
casting?Similaire à la réponse de SkonJeet ci-dessus, mais les performances sont meilleures (au moins en java):
la source
la source
vous pouvez essayer de cette manière: obtenir la valeur entière du double, soustraire celle-ci de la valeur double d'origine, définir une plage d'arrondi et tester si le nombre absolu de la nouvelle valeur double (sans la partie entière) est plus grand ou plus petit que votre plage définie. s'il est plus petit, vous pouvez avoir l'intention que ce soit une valeur entière. Exemple:
Si vous affectez à d la valeur 33,15, la méthode renvoie true. Pour obtenir de meilleurs résultats, vous pouvez attribuer des valeurs inférieures à testRange (comme 0,0002) à votre discrétion.
la source
Personnellement, je préfère la solution d'opération modulo simple dans la réponse acceptée. Malheureusement, SonarQube n'aime pas les tests d'égalité avec des points flottants sans définir une précision ronde. Nous avons donc essayé de trouver une solution plus conforme. C'est ici:
Remainder(BigDecimal)
renvoie unBigDecimal
dont la valeur est(this % divisor)
. Si celui-ci est égal à zéro, nous savons qu'il n'y a pas de virgule flottante.la source
Ma solution simple:
la source
Voici une solution:
la source