프로그래머스를 풀던 와중 javascript의 소수점 오류가 다시 한번 발견되었다.

그동안 그냥 그렇구나 하고 넘어갔지만, 이번에는 확실하게 짚고 넘어가려고 한다.

javascript에서 소수점 계산을 하다보면 아래와 같은 결과값이 나오는 경우가 종종 있었다.

console.log(0.1 + 0.2)
-> 0.30000000000000004

이유

우리가 입력하는 숫자는 10진법으로 자바스크립트에서는 이를 2진법으로 변환하는 과정에서 몇몇 소수는 무한 소수가 되어버리는데, 컴퓨터의 메모리에는 한계점이 있기 때문에 이를 중간에서 유한 소수로 저장한다.

출처 : https://cbs5295.medium.com/kotlin-자료형과-변수-심화-8fa6f396bf7e

출처 : https://cbs5295.medium.com/kotlin-자료형과-변수-심화-8fa6f396bf7e

해결 방법

1. toFixed() 메소드

매개변수만큼 자릿수를 반올림해 String으로 반환해주는 함수이다.

const sum = 0.1 + 0.2;
console.log(sum.toFixed(1));
-> 0.3

2. Math.round()

반올림해주는 함수이다. 반올림 하여 가장 가까운 정수를 반환해준다.

const sum = 0.1 + 0.2;
console.log(Math.round(sum * 10) / 10);
-> 0.3