-
0.1+0.2 = 0.3이 아니다? - 부정확한 계산FrontEnd/JavaScript 2023. 1. 30. 13:35반응형
자바스크립트를 포함한 다른 언어에서도 발생하는 현상이다.
10진수로 표현한 0.1과 0.2를 더하면 우리는 쉽게 0.3을 계산할 수 있지만
컴퓨터는 이진수로 숫자를 기억하기 떄문에 발생하는 오차이다.
이진수로 이루어진 숫자는 0과 1로 구성되어 0.1,0.2같은 분수는
이진법으로 표현하면 무한 소수가 됩니다.
1/3을 십진법으로 표현하면 0.3333...이 되는 것 처럼요.
10진법에서 1/3을 정확하게 나타낼 수 없듯이, 2진법을 사용해 0.1과 0.2를 정확하게 저장하는 방법은 없습니다.
이 문제를 어떻게 해결할까요?
가장 신뢰할만한 방법은 toFixed() 메서드를 사용해 어림수를 만들면 됩니다.
toFixed()함수는 숫자를 전달받아 괄호 안에 인수만큼 소숫점자리수까지 계산한 뒤 반올림하여 문자열로 나타내줍니다.
let sum = 0.1 + 0.2; alert( sum.toFixed(2) ); // 0.30
0.1과 0.2를 더한 sum을 전달받아 toFixed(2)메서드를 사용하면 소수점 두번째 자리인 0.30까지 문자열로 반환합니다.
이때 문자열을 숫자로 바꾸기 위해서 +단항 연산자를 사용하면 오차없이 0.1+0.2의 값을 얻을 수 있습니다.
이외에 10의 제곱인 숫자를 곱한 뒤 계산하여 다시 나눠주는 방법도 있지만 나눗셈이 들어가기 때문에 소수가 다시 등장할
수 있는 단점이 있습니다. 더욱 자세한 내용을 알고싶으시다면 아래 링크를 참조해주세요
반응형'FrontEnd > JavaScript' 카테고리의 다른 글
값이 확정되어있는 피연산자를 찾는 법 = nullish 병합 연산자 '??' (0) 2023.01.24 var Hoisting이 뭘까?! (0) 2023.01.22 JS엔진이 일을 처리하는 방법 (0) 2023.01.21 11장 원시 값과 객체의 비교 (0) 2021.12.30 10장 객체 리터럴 (0) 2021.12.24