Exp/Java & Java Script

[JS] 숫자 금액을 한글 금액으로 바꾸기를 했다.

kilog 2024. 5. 14. 00:55
728x90

안녕하세요 ki입니다.

이번 Exp는 자바스크립트를 이용한 숫자를 한글로 변환하는 방법입니다.

저는 은행 프로젝트를 참여하며 증명서 작업을 참 많이 했습니다. 그중 "잔액증명서"라는 것도 알게 됐습니다.

말 그대로 계좌에 잔액을 증명하는 증명서입니다.

 

주의사항은 잔액을 증명하기 위해 하루동안은 계좌에 거래가 정지가 되는 점이 중요합니다.

저는 그런 점을 모르고 증명서 작업 중에 테스트 계좌가 모두 정지가 된 적이 있어 계정계 개발자분들에게 찾아가서 

답변을 받았습니다....ㅎㅎ

잔액 증명서 예시

 

 

잔액증명서는 정확한 금액을 표시하기 위해 한글로 표시하기도 하는데요.

공문서에 작성 되는 한글 표기법으로 생각하시면 됩니다.ㅎㅎ

 

 

 

SCRIPT

function won(num) {	
    var hanA = new Array("","일","이","삼","사","오","육","칠","팔","구","십");
    var danA = new Array("","십","백","천","","십","백","천","","십","백","천","","십","백","천");
    var result = "";
	for(i=0; i<num.length; i++) {		
		str = "";
		han = hanA[num.charAt(num.length-(i+1))];
		if(han != "")
			str += han+danA[i];
		if(i == 4) str += "만";
		if(i == 8) str += "억";
		if(i == 12) str += "조";
		result = str + result;
	}
	if(num != 0)
		result = result + "원";
    return result ;
}

 

위 코드는 100000000(1억원)의 경우 1억 원이 아닌 1억만 원이라고 리턴하는 문제가 있었습니다.

 

 

function won2(numStr) {
    var currencyFormat = new RegExp(/^\d{1,3}(,\d{3})+$/);
    if (isNaN(numStr) && !currencyFormat.test(numStr)) {
        return "";
    }
    var num = numStr.replace(/,/g, "");
    var hanA = ["","일","이","삼","사","오","육","칠","팔","구"];
    var danA = ["","십","백","천"];
    var danGA = ["","만","억","조", "경", "해", "자", "양", "구", "간", "정", "재", "극", "항하사", "아승기", "나유타", "불가사의", "무량대수", "겁", "업"];
    var danGAttachA = [];
    var result = "";
    for (var i=0; i<num.length; i++) {
        var str = "";
        var char = num.charAt(num.length-(i+1));
        var han = hanA[char];
        var danChk = Math.floor(i / 4);
        if (han != "") {
          str += han;
          str += danA[i%4];
          if (!danGAttachA[danChk]) {
            str += danGA[danChk];
            danGAttachA[danChk] = true;
          }
        }
        result = str + result;
    }
    if(num != 0) {
        result = result + "원";
    }
    return result;
}

 

위 코드가  처음 코드를 변경한 부분입니다.

2번째 코드가 정상적으로 변환이 된다는 것을 알수있습니다.

 

저는 부족한 자바스크립트 실력을 위해 위 코드들과 다른 방법을 만들어 봤습니다.

function won3(numStr) {
    const currencyFormat = /^\d{1,3}(,\d{3})+$/;
    if (isNaN(numStr) && !currencyFormat.test(numStr)) return "";

    const hanA = ["","일","이","삼","사","오","육","칠","팔","구"];
    const danA = ["","십","백","천"];
    const danGA = ["","만","억","조", "경", "해", "자", "양", "구", "간", "정", "재", "극", "항하사", "아승기", "나유타", "불가사의", "무량대수", "겁", "업"];
    const num = numStr.replace(/,/g, "").split("").reverse().join("");
    let result = "";

    for (let i = 0; i < num.length; i++) {
        const char = parseInt(num.charAt(i));
        const han = hanA[char];
        const danChk = Math.floor(i / 4);
        let str = han ? han + danA[i % 4] : "";
        str += han && !result && danGA[danChk] ? danGA[danChk] : "";
        result = str + result;
    }
    return result ? result + "원" : "";
}

 

 

참조