자바스크립트에서 0.1 + 0.2 === 0.3의 결과는 false입니다. 그 원인은 부동소수점 형식의 한계에 있습니다.
자바스크립트에서 모든 숫자는 IEEE 754 표준을 따르는 64비트 부동소수점 형식으로 저장됩니다. 이 방식은 일부 소수점 연산에서 정확한 값을 저장하지 못하는 한계를 갖습니다. 예를 들어, 0.1과 0.2를 이진수로 변환하면 무한 반복되는 소수로 표현되므로, 컴퓨터는 이를 근사값으로 저장합니다. 이로 인해 결과적으로 0.1 + 0.2의 실제 값은 0.30000000000000004가 되는데, 이는 0.3과 일치하지 않기 때문에 === 연산자로 비교하면 false가 반환됩니다.
이러한 오차를 해결하려면 어떻게 하나요? 🤔
가장 단순한 해결책은 특정 자릿수까지 반올림하는 것입니다. toFixed() 또는 toPrecision() 메서드를 사용할 수 있습니다. 다만 이 방법은 숫자가 문자열로 변환되는 부작용이 있습니다.
또 다른 방법은 Number.EPSILON을 활용하여 비교하는 것입니다. Number.EPSILON은 자바스크립트에서 표현할 수 있는 가장 작은 수입니다. 이 값을 이용하여 다음과 같이 두 수를 비교하는 함수를 작성할 수 있습니다.
function isEqual(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3)) // true;
LIST
'Spring & Backend' 카테고리의 다른 글
| Core Web Vitals란 무엇인가요? (10) | 2025.07.29 |
|---|---|
| GC 알고리즘은 어떤 것이 있나요? (2) | 2025.07.29 |
| 문득, 롬복의 등장과 함께 많이 사라진 @Autowired (2) | 2025.07.27 |
| DB에서 list와 hash map으로 받기 (6) | 2025.07.27 |
| 자동 스레드 생성 시스템에서 API 요청이 많아 Rate Limit에 걸릴 위험 회피 방안 (6) | 2025.07.26 |
