본문 바로가기

Computer/javascript

[소개] 숫자연산 big.js, 날짜처리 luxon.js

현재 자바스크립트는 전 세계에서 가장 많이 사용되는 언어 중에 하나이며 강력한 언어이기도 합니다.

배우기도 비교적 쉬우며 최근에는 Front-end 뿐만 아니라 Back-end 프로그래밍 언어로도 많이 사용하고 있습니다.

그.러.나.

자바스크립트를 사용하다 보면 주의해야 할 사항들이 몇 가지 있는데 

가장 많이 알려진 것이 자동세미콜론추가(Auto Semicolon insertion)로 

문장마지막에 세미콜론을 추가하지 않을경우 인터프리터가 수행 시에 자동추가해서 수행하는 기능입니다.

최근에는 엔진들이 많이 개선되어 자동세미콜론추가의 경우 문법을 판단하고 추가하기는 하지만 잘못하면 의도하지 않은 오류를 발생시키기도 합니다.

오늘 이야기 할 것은 자동세미콜론추가가 아니고

숫자연산과 날짜처리 입니다.

1. 숫자연산
    자바스크립트는 기본적으로 숫자연산에서 오류를 발생시킬 위험을 가지고 있습니다.
    예를 들어 0.1 + 0.2를 하면 우리는 0.3을 기대하지만 자바스크립트는 엉뚱한 값(0.30000000000000004)을 출력합니다.
    
    이는 자바라는 언어도 유사한데 자바에서도 정확한 숫자의 처리를 위해서 BigDecimal 클래스를 사용하듯이
    자바스크립트도 별도의 처리를 해 주어야 합니다.
    
    깃허브에는 전세계 많은 이들이 이것을 해결하기 위해서 여러 라이브러리를 사용한 것을 볼 수 있는데 이 중에서 1위를 차지하고 있는 것이
    big.js 라이브러리 입니다.
    

let x = new Big(0.1)
let y = x.plus(0.2) 
console.log(y.toString()); // 0.3

 


    
    [참고] big.js API
    https://mikemcl.github.io/big.js/

2. 날짜처리

    자바스크립트는 날짜를 처리함에 있어서 보통은 큰 문제가 없긴 합니다.
    그러나 예를들어 '2024-04-30'의 2달 전의 날짜를 구하면....
    자바스크립트는 '2024-02-30'이 없으므로 '2024-03-01'을 출력합니다.
    자바나 DBMS에서는 위와 같은 연산을 하게되면 '2024-02-30'이 없으므로 2월의 마지막일인 '2024-02-29'를 출력합니다.
    2달 전이 아니라 60일 전으로 하면 큰 문제는 없지만 2달과 60일은 다르므로 위의 결과는 의도한 바에 차이가 있습니다.
    
    역시 이 문제에 대해서도 여러 라이브러리들이 있는데 나름 가볍고 쓰기 쉬운 luxon 라이브러리를 소개합니다.
    


let DateTime = luxon.DateTime;

let dt = DateTime.fromISO("2024-04-30");
let result = dt.minus({months: 2}).toFormat("yyyy-MM-dd");
console.log("time....", result);   // 2024-02-29

 

[참고] github
    https://moment.github.io/luxon/#/?id=luxon