Ihr something
ist ein double
, und Sie haben das in der Zeile richtig identifiziert
if (something == 0)
Wir haben eine double
auf der linken Seite (lhs) und eine int
auf der rechten Seite (rhs).
Aber jetzt scheint es so, als ob Sie denken, dass die lhs in eine konvertiert werden int
, und dann ==
vergleicht das Vorzeichen zwei ganze Zahlen. Das ist nicht , was passiert. Die Konvertierung von double
nach int
ist explizit und kann nicht "automatisch" erfolgen.
Stattdessen passiert das Gegenteil. Das rhs wird in konvertiert double
, und dann wird das ==
Vorzeichen zu einem Gleichheitstest zwischen zwei Doppelwerten. Diese Konvertierung ist implizit (automatisch).
Es wird (von einigen) als besser angesehen, zu schreiben
if (something == 0.0)
oder
if (something == 0d)
denn dann ist es sofort, dass Sie zwei Doppel vergleichen. Dies ist jedoch nur eine Frage des Stils und der Lesbarkeit, da der Compiler auf jeden Fall das Gleiche tut.
In einigen Fällen ist es auch relevant, eine "Toleranz" wie in Jon Skeets Antwort einzuführen, aber diese Toleranz wäre auch eine double
. Es könnte natürlich sein, 1.0
wenn Sie wollten, aber es muss nicht [die am wenigsten streng positive] Ganzzahl sein.
// Comparison of floating point numbers with equality // operator.
Mussten Sie das wirklich angeben? :)