JS

0.1 + 0.2 !== 0.3 (+해결방법)

2025. 3. 4. 17:46
console.log(0.1 + 0.2);	// 0.30000000000000004

 

컴퓨터는 10진수의 소수 표현을 2진수로 바꿔서 계산한다.

 

여기서 오른쪽처럼 이진수가 딱 떨어지지 않고 무한히 이어지는 소수를 '무한소수'라고 하는데,

자바스크립트는 자신이 표현할 수 있는 데까지만 하기 위해 마지막 자리를 반올림한다.

여기서 발생하는 미세한 차이가 오차로써 나타나는 거라고 한다.

 

따라서 어떤 소수점 숫자의 이진수가 무한소수일 경우, 그 둘을 더했을 때 딱 떨어지는 수가 아닌 길고 장황한 결과가 나오는 것이다.

 

그래서, 소수점끼리 올바르게 연산된 결과를 얻어내려면?

let sum = 0.1 + 0.2;

// 방법 1
console.log(+sum.toFixed(1)); // 0.3 (toFixed는 문자열로 바꾸기 때문에 다시 숫자로 만들기 위해 +를 붙여준다.)

// 방법 2
console.log(Math.round(sum * 10) / 10);	// 소수점 이하 숫자가 반올림되지 않도록 sum*10, 즉 자연수 값에 round를 적용한 후 다시 10으로 나눔

 

+ toFixed(0) === toFixed()

'JS' 카테고리의 다른 글

함수 형태로 감싼다고 함수형 프로그래밍이 아니다  (0) 2025.04.07
const 변수 vs const 상수  (0) 2025.03.04
객체 순회 문제에서 파생된 두 가지 문제들  (0) 2025.03.03
옵셔널 파라미터?  (0) 2025.03.02
콘솔 로그 안에서 콘솔 로그를 호출하면?  (0) 2025.03.02
'JS' 카테고리의 다른 글
  • 함수 형태로 감싼다고 함수형 프로그래밍이 아니다
  • const 변수 vs const 상수
  • 객체 순회 문제에서 파생된 두 가지 문제들
  • 옵셔널 파라미터?
쥬피썬더의노예
쥬피썬더의노예
오히려 좋아
  • 쥬피썬더의노예
    d.log
    쥬피썬더의노예
    글쓰기 관리
    • 분류 전체보기 (112)
      • JS (37)
      • TS (3)
      • WEB (10)
      • React.js (20)
      • Next.js (4)
      • tanstack query (2)
      • Node.js (2)
      • HTML (5)
      • CSS (13)
      • CS (1)
      • 에이전트 (1)
      • Git (4)
      • JAVA (0)
      • SQL (0)
      • db (0)
      • GSAP (0)
      • 자료구조 (1)
      • 알고리즘 (0)
      • ✨회고 (5)
      • 포꾸 (0)
      • 인터뷰 (0)
      • 개발일지 (0)
      • 일기 (1)
      • etc (3)
      • 정처기 실기 (0)
        • C (0)
        • Java (0)
        • Python (0)
      • fonts (0)
      • articles (0)
      • 도서 (0)
  • 인기 글

  • 태그

    슬라이딩 윈도우
    폼
    GIT
    SSR
    css
    프론트엔드
    state
    useState
    CSR
    javascript
    Next.js
    자바스크립트
    React
    useEffect
    클로저
    React.JS
    zustand
    WEB
    SSG
    Til
    HTML
    리액트
    안티그래비티
    유효성 검사
    상태 관리
    React Query
    리팩토링
    조합 패턴
    아키텍처
    TypeScript
  • 최근 글

  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
쥬피썬더의노예
0.1 + 0.2 !== 0.3 (+해결방법)
상단으로

티스토리툴바