[JS] 금액 좀 읽어줘

J.yeon·2024년 3월 16일

간단할 것 같았는데 뭔가 복잡했던 숫자 → 한글 변환😵‍💫

let unitWords = ['','만','억','조','경'];
let splitUnit = 10000;

function readNum(num){
    let resultString = '';
    let resultArray = [];

    for(let i = 0; i < unitWords.length; i++){

        let unitResult = (num % Math.pow(splitUnit, i + 1)) / Math.pow(splitUnit, i); 
        unitResult = Math.floor(unitResult);

        if(unitResult > 0){
            resultArray[i] = unitResult;
        }
    }

    for(let i =0; i < resultArray.length; i++){
        if(!resultArray[i]) continue;
        resultString = String(resultArray[i]) + unitWords[i] + resultString
    }
    return resultString
}

ex. 125600

단위배열길이만큼 반복문을 돌려주고,
금액을 만단위(1승) = 10000로 나눈 나머지(5600)에 다시 만단위(0승) = 1 을 나눠 정수(5600)만 남겨줌

같은 방식으로 0~4까지 돌려보면,
만단위(2승) = 100000000 = 125600, 만단위(1승) = 10000 = 12
만단위(3승) = 1000000000000 = 125600, 만단위(2승) = 100000000 = 0
만단위(4승) = 10000000000000000 = 125600, 만단위(3승) = 1000000000000 = 0
만단위(5승) = 100000000000000000000 = 125600, 만단위(4승) = 10000000000000000 = 0

0이상을 만족하는 값만 배열에 넣어주기
resultArray[0] = 5600;
resultArray[1] = 12;

resultArray[5600, 12]


resultArray의 수(2)만큼 또 반복문을 돌려서,

if(!resultArray[i]) continue;
값이 없으면 다음 반복이 진행되도록 해주고

resultArray[0] 값(5600)과 unitWords[0] 값('')을 더해 resultString 에 담아줌

resultArray[1] 값(12)과 unitWords[1] 값('만')을 더해 resultString 에 담아준 뒤, 이전 resultString 값(5600)을 더해줌

=> '12만 5600'이라는 값이 나오게됨



tmi✍️

개발자에겐 초급이겠으나... 나에겐 어려웠던 이번 문제..😅

처음에 step나눠서 혼자 열심히 해보다가 당최 원리 분석을 못해서 다른 분들 어떻게 하셨나 서치해봤는데도 코드해석이 어려운게 대부분이었다.

무슨 원리인지 자세한 설명도 없었기에... 제일 쉬운 방법으로 하나하나 쪼개서 이해하려 노력해봤다.

'만 단위'로 읽어주는 것 말고도 전체를 한글로 변환해서 표현할 수도 있던데... 메소드를 검색해봐도 왜 그걸 썼는지 이해못하는 포인트가 많았다.

좀 더 JS를 공부한 뒤에 도전해 볼 예정🤓

profile
나혼자만 윈도우UP💻

0개의 댓글