[javascript] 소수점 처리 커스텀 함수 (사사오입, 오사육입)

Jinbro·2023년 7월 22일
0

javascript

목록 보기
10/13

배경설명

  • 공모주 청약 배정주식수 계산
    • 배정주식수 = 본인의 청약 주식수 / 청약 경쟁률
      • 청약 경쟁률의 경우, 소수점 2자리까지 공개
      • 배정주식수는 정수가 아닌 소수점 실수로 계산됨
    • 증권사마다 다르게 처리
  • 소수점 처리 방법 고민
    구분설명7.67.57.4javascript 내장함수엄격한 순위
    올림올림888Math.ceil(floatNum)4
    사사오입4 버림 5 올림 (일반적인 반올림)887Math.round(floatNum)3
    오사육입5 버림 6 올림877커스텀 개발 필요!2
    버림버림777Math.floor(floatNum)1

소수점 처리 방법에 따른 영향

  • 올림의 경우, 실제 배정주식수보다 많은 배정주식수 출력될 수 있음.
  • 버림의 경우, 반대
  • 엄격하게 배정주식수를 계산하기 위해 오사육입 방법 채택
  • 소수점 처리를 커스텀 함수를 만들어보자~

소수점 처리 커스텀 함수

  • 기준 소스점 값을 파라미터로 전달
/**
 * 커스텀 반올림 숫자 반환
 * @param {number} realNum 실수 (소수점 있는 숫자)
 * @param {number} baseFloatVal 기준 소수점 값 (0 초과 1 미만)
 * @returns {number} customRoundNum
 */
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); // 8
getCustomRoundNum(7.6, 0.6); // 8
getCustomRoundNum(7.5, 0.6); // 7
getCustomRoundNum(7.4, 0.6); // 7

// 사사오입 (반올림)
getCustomRoundNum(7.5, 0.5); // 8
getCustomRoundNum(7.4, 0.5); // 7
Math.round(7.5); // 8
Math.round(7.4); // 7

효과

  • javascript Math 객체의 내장함수에서 제공하는 기능 외에 다양한 소수점 처리 계산을 할 수 있다. 👍
    • round(반올림), floor(버림), ceil(올림)
profile
자기 개발 기록 저장소

0개의 댓글