console.log(0.1 + 0.2); // 0.30000000000000004
컴퓨터는 10진수의 소수 표현을 2진수로 바꿔서 계산한다.

여기서 오른쪽처럼 이진수가 딱 떨어지지 않고 무한히 이어지는 소수를 '무한소수'라고 하는데,
자바스크립트는 자신이 표현할 수 있는 데까지만 하기 위해 마지막 자리를 반올림한다.
여기서 발생하는 미세한 차이가 오차로써 나타나는 거라고 한다.
따라서 어떤 소수점 숫자의 이진수가 무한소수일 경우, 그 둘을 더했을 때 딱 떨어지는 수가 아닌 길고 장황한 결과가 나오는 것이다.
그래서, 소수점끼리 올바르게 연산된 결과를 얻어내려면?
let sum = 0.1 + 0.2;
// 방법 1
console.log(+sum.toFixed(1)); // 0.3 (toFixed는 문자열로 바꾸기 때문에 다시 숫자로 만들기 위해 +를 붙여준다.)
// 방법 2
console.log(Math.round(sum * 10) / 10); // 소수점 이하 숫자가 반올림되지 않도록 sum*10, 즉 자연수 값에 round를 적용한 후 다시 10으로 나눔
+ toFixed(0) === toFixed()
'JS' 카테고리의 다른 글
| 함수 형태로 감싼다고 함수형 프로그래밍이 아니다 (0) | 2025.04.07 |
|---|---|
| const 변수 vs const 상수 (0) | 2025.03.04 |
| 객체 순회 문제에서 파생된 두 가지 문제들 (0) | 2025.03.03 |
| 옵셔널 파라미터? (0) | 2025.03.02 |
| 콘솔 로그 안에서 콘솔 로그를 호출하면? (0) | 2025.03.02 |