filterResultsByEqual(double target)
메서드에서 int
와 double
을 비교할 때 검색 결과가 반환되지 않는 문제 발생 124.0
이 존재하지만 124
를 입력하면 검색 결과가 나오지 않음double
)과 정수(int
)는 다르게 저장됨 int
와 double
을 직접 비교할 경우 암묵적 형 변환이 일어나면서 오차가 발생할 수 있음 System.out.println(124 == 124.0); // true (자동 형 변환)
System.out.println(Double.compare(124, 124.0)); // 0 (정확한 비교 가능)
filterResultsByEqual
)public List<Double> filterResultsByEqual(double target) {
return results.stream()
.filter(value -> value == target) // ❌ `int`와 `double` 비교 문제 발생
.collect(Collectors.toList());
}
✅ 이전 코드에서는 ==
연산자를 사용하여 직접 비교
🚨 하지만 int
와 double
비교 시 예상치 못한 결과 발생!
Double.compare()
사용하여 정확한 비교 수행Double.compare(x, y)
는 부동소수점과 정수를 정확하게 비교해 주는 메서드 0
을 반환하면 두 값이 동일한 것으로 간주됨public List<Double> filterResultsByEqual(double target) {
return results.stream()
.filter(value -> Double.compare(value, target) == 0) // ✅ 정확한 비교 수행
.collect(Collectors.toList());
}
📜 현재 저장된 연산 결과: [0.7924, 166.0, -31.0, 124.0, 4.4375]
기준값을 입력하세요 ('n' 입력 시 뒤로 가기): 124
✅ 검색 결과: [124.0]
정확한 값 매칭이 가능해짐!
문제 원인 | 해결 방법 |
---|---|
== 연산자로 int 와 double 을 비교하면서 예상과 다른 결과 발생 | Double.compare() 사용하여 정확한 비교 수행 |
int 를 입력했을 때 double 로 변환되지 않아서 검색이 실패함 | double 로 변환 후 Double.compare() 를 활용하여 비교 |
결론:
Double.compare()
사용이 필수!