JavaScript에서 숫자를 한국어 문자로 변환하는 법 2

JavaScript는 숫자를 한국어로 변환하는 기능을 포함하여 많은 응용 프로그램이 있는 강력한 프로그래밍 언어이다. 이것은 금융 소프트웨어나 데이터베이스와 같이 많은 숫자를 다루는 응용 프로그램에서 매우 유용한 기능이다. 저번 포스트에서 JavaScript에서 숫자를 한국어 문자로 변환하는 법을 알아 보았는데 제일 큰 단위의 숫자만을 표현하는 방식 이었다, 이 포스트에서는 좀 더 업데이트하여 원하는 단위만큼 숫자를 한국어로 변환하는 JavaScript 코드를 작성하는 방법을 알아볼 것이다.

 

다음은 이 코드가 작동하는 방법의 예 이다.

Input: 1234567899
Output: 123,4567,899

 

 

 

첫 번째 단계로 함수를 정의한다. 이 'numberToKorean' 이라는 함수는 'number', 'characters' 두 매개변수 를 사용 한다.  'number' 매개변수는 한글로 변환하고자 하는 숫자이고, 'characters' 변수는 출력의 최대 단위수를 지정하는 옵셔널 매개변수 이다.

function numberToKorean(number, characters) {
  ...
}

 

다음으로 'result', 'units', 'num', 'resultCharacters' 라는 변수를 한다.

'result'는 빈 문자열로 초기화하고 마지막에 문자로 변환될 최종 결과를 저장할 것이다.

 'units'는 한국어 숫자의 단위를 포함하는 상수 배열이다. 배열은 가장 낮은 숫자의 단위부터 큰 단위까지 순서대로 지정된다.

'resultCharacters'변수는 현재 얼마나 많은 단위를 지정 하였는지를 저장하여 출력의 최대 단위수에 도달하면 함수를 종료한다.

  let result = '';
  const units = ['', '만 ', '억 ', '조 ', '경 ', '해 ', '자 ', '양 ', '구 ', '간 ', '정 '];
  let num = number;
  let resultCharacters = 0;

 

다음 단계로 while 반복문을 시작한다. 이 반복문은 'num'가 0보다 크고 'characters' 매개변수가 지정되지 않았거나 결과 길이가 지정된 문자('characters')보다 작을 때까지 계속된다.

while (num > 0 && (!characters || resultCharacters < characters)) {
  ...
}

 

반복문내에서 먼저 Math.min함수로 Math.floor(Math.log10(num) / 4)값과 units.length - 1 사이의 최소값을 'currentUnitIndex'라는 변수에 저장한다.

while (num > 0 && (!characters || resultCharacters < characters)) {
  const currentUnitIndex = Math.min(
      Math.floor(Math.log10(num) / 4),
      units.length - 1,
  );
  ...
}

 

다음으로 'currentUnitIndex'를 사용하여 units배열에서 현재 단위를 가져오고, currentUnitIndex에 4를 곱한 값을 10의 거듭제곱으로 하여 'num' 값에서 나누어 'currentNum'에 저장한다. 이 값은 현재 단위에 대한 숫자이다.

Math.floor를 사용 하여 'currentNum'을 가장 가까운 정수로 내림하고 .toString 메서드를 사용하여 문자열로 변환한다. 

while (num > 0 && (!characters || resultCharacters < characters)) {
  ...
  
  const currentUnit = units[currentUnitIndex];
  let currentNum = num / Math.pow(10, currentUnitIndex * 4);
  currentNum = Math.floor(currentNum);
  const currentNumStr = currentNum.toString().split('');
  
  ...
}

 

 

for 루프를 사용하여 현재 'currentNumStr'의 길이만큼 반복한다. for 루프 내에서 'result'에 한글자씩 추가하며, if 문을 사용하여 'result'에 추가된 문자가 첫 번째 문자면서, 전체 문자수가 4자리이면 'result'에 쉼표를 추가한다.

while (num > 0 && (!characters || resultCharacters < characters)) {
  ...
  
  for (let i = 0; i < currentNumStr.length; i++) {
      result += currentNumStr[i];
      if (i === 0 && (currentNumStr.length - i) % 4 === 0) {
        result += ',';
      }
  }
  
  ...
}

 

다음으로 현재의 단위를 'result'에 추가하고, 여기에 resultCharacters + 1을 하여 resultCharacters값을 증가시켜 지금까지 처리한 단위의 갯수를  +1 한다.

마지막으로 'currentUnitIndex'에 4를 곱한값을 10의 거듭제곱으로 한 값을 구한 뒤, 'currentNum'에 곱하고 'num'에서 빼준다. 이는 다음 반복에서 아직 처리되지 않은 나머지 숫자만 처리하도록 하기 위한 것이다.

while (num > 0 && (!characters || resultCharacters < characters)) {
  ...
  
  result += currentUnit;
  resultCharacters += 1;
  num -= currentNum * Math.pow(10, currentUnitIndex * 4);
}

 

 

반복문이 종료되면 'result'를 반환한다.

return result;

 

전체코드

function numberToKorean(number, characters) {
  let result = '';
  const units = ['', '만 ', '억 ', '조 ', '경 ', '해 ', '자 ', '양 ', '구 ', '간 ', '정 '];
  let num = number;
  let resultCharacters = 0;

  while (num > 0 && (!characters || result.length < characters)) {
    const currentUnitIndex = Math.min(Math.floor(Math.log10(num) / 4), units.length - 1);
    const currentUnit = units[currentUnitIndex];
    let currentNum = num / Math.pow(10, currentUnitIndex * 4);
    currentNum = Math.floor(currentNum);
    const currentNumStr = currentNum.toString().split('');
    for (let i = 0; i < currentNumStr.length; i++) {
      if (i !== 0 && (currentNumStr.length - i) % 4 === 0) {
        result += ',';
      }
      result += currentNumStr[i];
    }
    result += currentUnit;
    resultCharacters += 1;
    num -= currentNum * Math.pow(10, currentUnitIndex * 4);
  }
  return result;
}
© Copyright 2023 CLONE CODING