Ist das möglich?
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
}
Ich weiß, dass der Code wahrscheinlich nicht so aussieht, aber wie geht es?
double
undint
werden im Speicher unterschiedlich dargestellt, und Sie würden das eine oder andere basierend auf dem Kontext Ihrer Speicherbehandlung verwenden.Antworten:
Dies prüft, ob der abgerundete Wert des Double mit dem Double identisch ist.
Ihre Variable kann einen int- oder double-Wert haben und hat
Math.floor(variable)
immer einen int-Wert. Wenn Ihre Variable also gleich ist,Math.floor(variable)
muss sie einen int-Wert haben.Dies funktioniert auch nicht, wenn der Wert der Variablen unendlich oder negativ unendlich ist, und fügt der Bedingung daher hinzu, dass die Variable nicht unendlich ist.
quelle
int
If-if
Auswertung wartrue
.Oder Sie können den Modulo-Operator verwenden:
(d % 1) == 0
quelle
Math.rint(d)
?d
in C und C ++ für Negative nicht gut definiert ist .Guave :
DoubleMath.isMathematicalInteger
. (Offenlegung: Ich habe es geschrieben.) Oder, wenn Sie Guava noch nicht importieren,x == Math.rint(x)
ist dies der schnellste Weg.rint
ist messbar schneller alsfloor
oderceil
.quelle
quelle
Versuchen Sie es so,
beispielsweise:
daher 12,9 ist nicht ganzzahlig, dennoch
daher ist 12.0 eine ganze Zahl
quelle
Hier ist eine Version für
Integer
undDouble
:So konvertieren Sie
Double
zuInteger
:quelle
Erwägen:
Dies bleibt bei Kern-Java und vermeidet einen Gleichheitsvergleich zwischen Gleitkommawerten (
==
), der als schlecht eingestuft wird. DiesisFinite()
ist notwendig, ebensorint()
wie Durchgangs-Unendlichkeitswerte.quelle
Der beste Weg ist mit Modul Operator
quelle
Hier ist eine gute Lösung:
quelle
(bool)
Besetzung?Ähnlich wie bei SkonJeets Antwort oben, aber die Leistung ist besser (zumindest in Java):
quelle
quelle
Sie können dies folgendermaßen versuchen: Ermitteln Sie den ganzzahligen Wert des Doppelten, subtrahieren Sie diesen vom ursprünglichen doppelten Wert, definieren Sie einen Rundungsbereich und testen Sie, ob die absolute Zahl des neuen doppelten Werts (ohne den ganzzahligen Teil) größer oder kleiner als Ihr Wert ist definierter Bereich. Wenn es kleiner ist, können Sie es beabsichtigen, es ist ein ganzzahliger Wert. Beispiel:
Wenn Sie d den Wert 33.15 zuweisen, gibt die Methode true zurück. Um bessere Ergebnisse zu erzielen, können Sie testRange nach eigenem Ermessen niedrigere Werte (als 0,0002) zuweisen.
quelle
Persönlich bevorzuge ich die einfache Modulo-Operationslösung in der akzeptierten Antwort. Leider mag SonarQube keine Gleichheitstests mit Gleitkommawerten, ohne eine runde Genauigkeit festzulegen. Deshalb haben wir versucht, eine konformere Lösung zu finden. Hier ist es:
Remainder(BigDecimal)
gibt a zurück,BigDecimal
dessen Wert ist(this % divisor)
. Wenn dies gleich Null ist, wissen wir, dass es keinen Gleitkomma gibt.quelle
Meine einfache Lösung:
quelle
Hier ist eine Lösung:
quelle