관리 메뉴

한솔닷컴

[Javascript] 금액을 한글로 변환하기 본문

it/programming

[Javascript] 금액을 한글로 변환하기

훈솔 2015.02.17 11:09





function viewKorean(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 ;
}



ex) 111302000 -> 일억일천일백삼십만이천원


잘 나옵니다.

4 Comments
  • 프로필사진 Terry 2015.02.17 13:43 신고 코드 잘 보았습니다..
    근데 작성하신 방식보단..
    for문안에서 작업할 배열 인덱스를 구할때 num.length-(i+1)) 이렇게 하는것 보단..
    for문 자체를 역순으로 하는게 더 좋습니다..
    for(i=num.length-1; i < -1; i--){
    han = hanA[num.charAt(i)];
    }

    이렇게 하면 for 문 안에서 작업할 배열 인덱스를 반복적으로 구하는 작업을 피할수 있죠..
    그리고 또 하나..
    배열 danA는 "", "십", "백", "천" 만 넣고..
    str에 만, 억, 조를 찍을때 dan의 인덱스를 다시 0으로 초기화 하는 식으로 작업하는게 더 낫습니다..
    지금방법으로 할 경우 처리해야 할 숫자의 크기가 커지면 danA 배열과 내부 코드를 같이 고쳐야 하지만..
    이 방법을 사용하면 내부 코드만 고치면 되기 때문이죠..
    i==4, i==8, i==12 이 부분도 나머지 연산자를 이용해서 나머지가 0일 경우만 붙이면 되도록 할수도 있지만..
    그렇게 할 경우 만, 억, 조도 배열로 관리해야 하기 때문에 그건 좀 그럴꺼 같아서 고치친 않았습니다..

    정리하면..


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

    코드를 보시고 따라해보시면 무슨 뜻인지 이해하실껍니다..
  • 프로필사진 Favicon of https://hsol.tistory.com 훈솔 2015.02.27 13:44 신고 역순으로 하는게 효율적이죠. 첨부한 제 코드는 그냥 흘러가는대로 코딩해놓은거라서..더러울거에요ㅎ

    좋은의견 감사합니다 ~
  • 프로필사진 황소록 2017.12.19 10:13 신고 function numberKorean(num) {
    var hanA = ["","일","이","삼","사","오","육","칠","팔","구","십"];
    var danA = ["","십","백","천"];
    var danGA = ["","만","억","조", "경", "해", "자", "양", "구", "간", "정", "재", "극", "항하사", "아승기", "나유타", "불가사의", "무량대수", "겁", "업"];
    var danGAttachA = [];
    var result = "";
    for (var i=0; i<num.length; i++) {
    var str = "";
    var han = hanA[num.charAt(num.length-(i+1))];
    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;
    }
  • 프로필사진 초보 2018.10.12 11:19 신고 100,000,000 원을 입력하면 일억원이 아니라 일억만원이라고 나오네요
댓글쓰기 폼