Занятная ошибка при реализации интерфейса Comparator

Два варианта кода – первый работает почти всегда корректно, второй всегда:

  RATING {
	Comparator comparator = new Comparator() {
	    public int compare(UserInfo o1, UserInfo o2) {
		return (int)(o2.rating-o1.rating);
	    }
	};

	@Override
	public Comparator comparator() {
	    return comparator;
	}
    },
  RATING {
	Comparator comparator = new Comparator() {
	    public int compare(UserInfo o1, UserInfo o2) {
		return new Float(o2.rating).compareTo(o1.rating);
	    }
	};

	@Override
	public Comparator comparator() {
	    return comparator;
	}
    },

Разница проявляется только на значениях близких к нулю – (int)(0-0.4) всегда дает 0 в результате, а для компаратора это означает равенство значений.