배경설명
- 공모주 청약 배정주식수 계산
- 배정주식수 = 본인의 청약 주식수 / 청약 경쟁률
- 청약 경쟁률의 경우, 소수점 2자리까지 공개
- 배정주식수는 정수가 아닌 소수점 실수로 계산됨
- 증권사마다 다르게 처리
- 소수점 처리 방법 고민
구분 | 설명 | 7.6 | 7.5 | 7.4 | javascript 내장함수 | 엄격한 순위 |
---|
올림 | 올림 | 8 | 8 | 8 | Math.ceil(floatNum) | 4 |
사사오입 | 4 버림 5 올림 (일반적인 반올림) | 8 | 8 | 7 | Math.round(floatNum) | 3 |
오사육입 | 5 버림 6 올림 | 8 | 7 | 7 | 커스텀 개발 필요! | 2 |
버림 | 버림 | 7 | 7 | 7 | Math.floor(floatNum) | 1 |
소수점 처리 방법에 따른 영향
- 올림의 경우, 실제 배정주식수보다 많은 배정주식수 출력될 수 있음.
- 버림의 경우, 반대
- 엄격하게 배정주식수를 계산하기 위해 오사육입 방법 채택
- 소수점 처리를 커스텀 함수를 만들어보자~
소수점 처리 커스텀 함수
getCustomRoundNum: (realNum, baseFloatVal) => {
if (baseFloatVal <= 0 || baseFloatVal >= 1) {
return realNum;
}
const intPart = Math.floor(realNum);
const floatPart = realNum - intPart;
if (floatPart >= baseFloatVal) {
return intPart + 1;
}
return intPart;
},
적용예시
getCustomRoundNum(7.7, 0.6);
getCustomRoundNum(7.6, 0.6);
getCustomRoundNum(7.5, 0.6);
getCustomRoundNum(7.4, 0.6);
getCustomRoundNum(7.5, 0.5);
getCustomRoundNum(7.4, 0.5);
Math.round(7.5);
Math.round(7.4);
효과
- javascript Math 객체의 내장함수에서 제공하는 기능 외에 다양한 소수점 처리 계산을 할 수 있다. 👍
- round(반올림), floor(버림), ceil(올림)