소수점 오류
JS에서 소수점 숫자 연산을 하면 가끔 생각지도 못한 오류가 발생함
내가 원하는 답이 아닌 이상한 답이 나오는 것
0.1 + 0.2 //0.30000000000000004
원인
사람은 계산을 할때 10진법으로 사용하지만 컴퓨터는 0,1만 사용하는 2진법을 사용함
그래서 계산을 할때 10진법을 2진법으로 바꾸는 변환과정이 필요한데 소주 중 일부는 이 과정에서 무한 소수가 되어버림
하지만 컴퓨터 메모리에 한계가 있어 무한 소수를 다 담지 못하고 중간에 잘라서 유한 소수로 저장해버리는 것
이 과정에서 미세한 오차가 발생함
해결방안
.toFixed()
(0.1 + 0.2).toFixed(2) //'0.30'
toFixed()는 입력받은 숫자를 매개변수만큼 자리수를 반올림해 String으로 반환해주는 함수
즉 매개변수로 소수점 몇번째 자리까지 나타낼지를 나타냄
0부터 20까지 입력할수 있음 그 이상을 매개변수로 주어질때 이상한 값이 들어감
const a = 0.123456789123456789123456789123456789
a.toFixed(25) //'0.1234567891234567837965841'
default값은 0이며(정수로 변환됨), 반올림해서 나타남
String으로 변환하기 때문에 number타입으로 사용하기를 원한다면 number타입으로 변환해주어야 함
Math.round()
Math.round(0.1 + 0.2) //0
Math.round((0.1 + 0.2) * 10) / 10; //0.3
Math.round()는 반올림을 해주는 함수임
매개변수로 들어온 값을 반올림한 후 가장 가까운 정수 값을 반환함
'JS' 카테고리의 다른 글
null 병합 연산자 ?? (1) | 2023.11.12 |
---|---|
JS, use strict / undeclared (0) | 2023.10.31 |
JS, BigInt (1) | 2023.10.19 |
JS, 모든 문자열 치환(replace, replaceAll) (1) | 2023.10.17 |
JS, 배열 비교 (0) | 2023.10.12 |
댓글