팩토리얼을 사용해서 경우의 수를 구하는 문제를 풀다가
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
'JavaScript' 카테고리의 다른 글
[JavaScript] 생성자 함수와 클래스 (1) | 2023.04.10 |
---|---|
[JavaScript] Map 객체 / new Map 생성자 (1) | 2023.04.09 |
[JavaScript] 옵셔널 체이닝 / nullish연산자(??) (0) | 2023.04.07 |
[JavaScript] async_await (0) | 2022.12.28 |
[JavaScript] fetch_more (0) | 2022.12.28 |