[TIL]22.05.24

jooooo·2022년 5월 24일
0
post-thumbnail

Today

기업 과제를 진행 중인데 아직 많이 어렵다 리덕스툴킷 사용을 처음해봐서 코드를 보면서 이해하고 있는 단계인 것 같다. 오늘은 json에서 받아온데이터를 비율로 나눠 그래프로 그리는 작업을 했다. 날짜도 받아와 날짜별로 그래프가 변경되도록하면 거의 끝난 것 같다!

BigNumberjs

소수점 자리수 처리를 위해 BigNumberjs 라이브러리를 사용했다. 이유는

80.15436865 + 0.59203514 = 80.74640378999999
80.74640379 + 9.85853479 = 90.60493858000001

위와 같이 8자리끼리 합산하면 소수점이 이상하게 나오는 것을 확인할 수 있다.
IEEE 754 표준 2진 부동 소수점을 계산하는 모든 프로그래밍 언어들에게서 나타나는 이슈라고 한다. 자바스크립트는 64-bits 부동 소수점 표현법을 사용하는데,
이 문제의 요점은 숫자가 2의 제곱으로 표현된다는 부분에서 분모가 2의 제곱이 아닌 유리수 (0.1 1/10과 같은)는 정확하게 표현이 될 수 없기 때문에 발생한다고 한다.
0.1 을 표준 binary64 형식으로 다음과 같이 정확하게 표현할 수 있다.

10진법으로 0.1000000000000000055511151231257827021181583404541015625
C99 hexfloat notation 으로 0x1.999999999999ap-4

반대로, 유리수 0.1 과 동일한 1/10 은 다음과 같이 정확히 표현할 수 있다.

10진법으로 0.1
C99 hexfloat noation 으로 0x1.99999999999999...p-4

아래 예제를 보면서 이해를 했다.

1/10 + 2/10 == 3/10
false
1/8 + 2/8 == 3/8
true

이번 과제를 진행하며 똑같은 이슈가 발생하였고 중간중간 계산하면서 number가 아닌 string으로 넘어오는 형식때문에 계속 NaN오류가 떠서... 팀원의 피드백을 받아 라이브러리를 사용하여 해결하였다. 전부 number가 맞나 확인하긴 시간이 오래걸릴 것 같아 리덕스로 받아온 데이터를 전부 bignumber라이브러리를 사용해 계산했다.

받아온 데이터들은 number로 타입지정을 해줬기때문에 뒤에 toNumber()을 붙여주었다.

profile
INFP🖐

0개의 댓글