Big Number on JavaScript


Categories: Web
Tags: #JavaScript

현상

요금 계산을 js로 할 때, 999999999999999 (15자리) 이후로 자릿수가 증가할수록 정확성이 깨지는 현상이 발생

9가 반올림 되거나 8로 표현되는 현상:

console.log("16자리 수", 9999999999999999) // "16자리 수", 10000000000000000
console.log("16자리 수 2", 9999999999999909) // "16자리 수 2", 9999999999999908

22자리 수 이상 지수 표시되는 현상:

console.log("22자리 수", 1000000000000000000000) // "22자리 수", 1e+21

분석 및 해결 방법

  • Javascript에서 정수는 최대 15 자리까지 정확하다
  • 정밀도 손실을 방지하려면 10진수 값을 숫자가 아닌 문자열로 직렬화
  • Big number를 다루는 라이브러리 사용

개발하는 어플리케이션이 정확한 계산이 필요한 경우 라이브러리를 사용하는 것이 필요할 것 같다. 하지만, 나의 경우는 대략적인 금액을 계산하면 되었기 때문에 문자열 직렬화로 지수 표현만 방지하였다.

toLocaleString

toLocaleString을 사용하여 문자열 표현

  • 단위 separator , 가 존재하도록 표현: toLocaleString()
  • 단위 seperator , 없이 표현: .toLocaleString('fullwide', {useGrouping:false})

참고 자료

Comments