[JavaScript] 소수점 사칙연산 처리하기 - 3
소수점 사칙연산 처리하기 - 1에서 마지막에 확인한 2.3 - 1.22 가 잘 되지 않았다. 왜 그럴까? 확인해보니 2.3 * 100 이 잘 되지 않았다. 2.3 * 100의 결과가 230이 나와야 하는데 229.9~로 나왔다. 이놈의 부동소수점이 골칫덩어리다. 그럼 어떻게 해결할 수 있을까. 고민하다가 String으로 변환하여 소수점을 없애고 계산하면 될 것 같아 시도해보았다. 아래 함수를 확인해보자.
# 소수점 없애기
필자는 소수점 2째자리까지만 표현이 가능한 기능을 개발 중이라 소수점 3째자리부터는 n자리인지 확인하는 규칙을 넣어주는 게 더 좋은 방법일 것 같다. 구현한 함수는 아래와 같다.
const removeDecimalPoint = number => {
const decimal = String(number).split(".")[1];
const newNumber = Number(String(number).replace(".", ""));
if (!Boolean(decimal)) return newNumber * 100;
const length = decimal.length;
if (length === 1) return newNumber * 10;
return newNumber;
};
우선 숫자가 소수점인지 확인한다. 소수점이 없는 경우 100을 곱하고 return, 1자리인 경우 10을 곱하고 return, 2자리인 경우 소수점만 없애고 return 을 해주었다. 이해가 되는가? 기존 공식이랑 똑같은데 방법만 다르다. 소수점 없애는 것을 replace 작업으로 해주었고 * 값 은 이전 규칙이랑 동일하다. 그럼 2.3 - 1.22가 잘 되는지 확인해보자.
우리가 원하는 결과 1.08이 잘 나오게되었다. n자리의 경우는 어떻게 해결할 수 있을지 위 removeDecimalPoint 함수를 확인해보고 간단하게 n자리 구하는 공식을 추가하면 좋을 것 같다.
마지막
해당 내용은 틀릴 수도 있다는 것을 감안하여 봐주세요. 틀린 내용 및 오탈자 수정 요청 환영입니다.
반응형
'공유 > JavaScript, TypeScript' 카테고리의 다른 글
[JavaScript] What is this? this가 뭐야... (0) | 2022.01.03 |
---|---|
[JavaScript] JS 기본, 비동기? 싱글 스레드? (0) | 2022.01.01 |
[JavaScript] 소수점 사칙연산 처리하기 - 2 (0) | 2021.11.18 |
[JavaScript] 소수점 사칙연산 처리하기 - 1 (0) | 2021.11.18 |
[JavaScript] 소수점 n자리에서 올림, 내림, 반올림 (0) | 2021.11.16 |