다른 답변은 정확하므로 여기에서 반복하지 않겠습니다.
내가 추가하고 싶은 것은 일반적으로 연관성을 암시 동치 관계로 == 고려에 대한 또 다른 가능성 놀라운이다 :
class Main {
public static void main(String[] args) {
int i=16777217;
float f=16777216.0f;
double d=16777216.0;
if(i == f) {
System.out.println("i == f");
}
if(d == f) {
System.out.println("d == f");
}
if(i == d) {
System.out.println("i == d");
}
}
}
:
(a == b) and (b == c) => (a == c)
는하지만 https://repl.it 예를 들면이 조각을 시도하는 경우
놀랍게도 i==f
과 f==d
이지만 not(i==d)
...
이것은 i==f
을 쓸 때 암시 적 변환 float(i)==f
이 발생합니다. int는 최대 31 비트의 정밀도를 요구할 수 있기 때문에이 변환은 잠재적으로 느슨합니다. float는 최대 24 개를 제공합니다.
Lisp, Scheme 또는 최근 버전 가족 이죠 작업이 합리적이고 부동 소수점 인수를 모두 포함 할 경우 Pharo 스몰 토크는 비교를 처리 /, 당신은
추출 일반적으로 http://www.lispworks.com/documentation/lcl50/aug/aug-170.html
에서 ... 그들은 정확성에 대한 관심 것을 볼 수 있습니다, 유리수는 먼저 부동 소수점 형식으로 변환 된 다음 연산은 pe입니다. 형성. 이 변환 프로세스를 부동 소수점 감염이라고합니다. 그러나 수치 평등 비교의 경우 인수는 동등성 (또는 불평등) 관계의 전 이성을 보장하기 위해 합리적인 산술을 사용하여 비교됩니다.
정확도는 두 개의 'float'변수와 같이 정밀도가 높습니다. [확대 변환] (https://docs.oracle.com/javase/specs/jls/se8/html/jls- 5.html # jls-5.1.2). –
https://stackoverflow.com/questions/13297207/is-it-valid-to-compare-a-double-with-an-int-in-java –
https://stackoverflow.com/questions/41653576/is -it-safe-to-compare-a-float-and-int-in-java –