JavaScript

[JavaScript] 소수점 오류? 0.30000000000000004

FRDYtheme 2023. 4. 8. 09:11

팩토리얼을 사용해서 경우의 수를 구하는 문제를 풀다가

 

nCm = n! / n-m! * m!

공식으로 수를 구하다보면 소수점으로 떨어지는 경우가 있을 것 같아

Math.trunc()를 사용했는데 실패해서 찾다가 알게된 글 정리.


 

컴퓨터는 2진법으로 계산을 하기 때문에 계산을 위해 10진법인 수를 2진법으로 변환하는 과정에서 무한소수가 생길 수 있다. 다만, 컴퓨터 메모리에는 용량 제한이 있기 때문에 컴퓨터가 알아서 무한 소수를 유한 소수로 바꿔서 저장하는데

이 과정에서 미세한 오류가 발생한다고 한다.

 

수포자라 자세히는 모르겠는데 여튼 소수를 계산하다보면 의도치 않은 수가 발생할 수 있으니 아래 메서드를 사용하자.

 

toFixed()

toFixed()는 입력받은 숫자를, 매개변수만큼 자리수를 반올림해 String으로 반환해주는 함수.

0 - 20까지의 자리수를 매개변수로 받는다.

 

*** String으로 반환하므로 숫자형으로 변환해줘야 한다. ***

let result = (0.1 + 0.2).toFixed(2); // 소수점 2번째 자리까지 나타냄.
// '0.30' 
Number(result); 
// 0.3

 

Math.round()

매개변수로 받은 숫자를  반올림 후 가장 가까운 정수 값을 반환하는 함수.

toFixed()의 매개변수를 0으로 지정해줬을 때처럼 정수값을 반환해준다는 점에 주의하자.

Math.round(20.49); 
// 20 
Math.round((0.1 + 0.2) * 10) / 10; 
// 0.3

 

 

[출처]

 

Javascript 소수점 오류 원인, 해결방안

자바스크립트에서 소수점 숫자 연산을 하면, 생각지도 못한 오류가 발생한다. 아래처럼 콘솔창에 0.1 + 0.2를 입력하면, 0.3이 아니라 0.30000000000000004 가 나오는 걸 확인해볼 수 있다. 이렇게 소수점

joooing.tistory.com