본문 바로가기
JS

JS, 소수점 오류

by Hyeon_E 2023. 10. 21.

소수점 오류

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

댓글