Ваш something
является double
, и вы правильно определили это в строке
if (something == 0)
у нас есть double
с левой стороны (lhs) и int
с правой стороны (rhs).
Но теперь кажется, что вы думаете, что lhs будет преобразовано в int
, и тогда знак ==
будет сравнивать два целых числа. Это не , что происходит. Преобразование из double
в int
является явным и не может происходить «автоматически».
Вместо этого происходит обратное. Значение rhs преобразуется в double
, а затем знак ==
становится проверкой на равенство между двумя двойными числами. Это преобразование неявное (автоматическое).
Лучше (по мнению некоторых) писать
if (something == 0.0)
или
if (something == 0d)
потому что тогда вы сразу сравниваете два двойных. Однако это просто вопрос стиля и читабельности, потому что компилятор будет делать то же самое в любом случае.
В некоторых случаях также уместно ввести «толерантность», как в ответе Джона Скита, но эта терпимость тоже будет double
. может, конечно, быть 1.0
, если вы хотите, но это не должно быть [наименее строго положительным] целым числом.