본문 바로가기
프로그래밍/Xcode-iOS

금액 한글 변환 소스(objective-c, iOS, 아이폰)

by Mr-후 2018. 4. 20.
반응형


금액 한글 변환 소스(objective-c,  iOS, 아이폰)



얼마전 회사에서 QR결제 기능을 개발하면서 인터넷에서 찾았던 소스, 단 javascript로 구성된 소스를 objective-c로 변경 해서 적용했다. 기본적인 알고리즘은 같은 맥락인데 사실 시간이 없어 신중하게 훓어 보지는 않았다. 다만, 각 금액의 단위에서 나누기로 나눠 십, 백, 천 단위를 붙히는 로직과 만, 억, 조 단위를 붙히는 로직이 흥미로워보였다. 이래서 수학을 잘해야한다고 하는 것 같은데, 수학을 제대로 공부한적이 없어서... 

우선 화면상으로 구현된 내용을 이미지로 보면 이해가 쉽다. 



입력된 금액을 전달 받아 콤마 변환과 한글 변환을 동시에 한다. 

NSString의 카테고리 메서드로 구현을 해서 사용했는데 소스는 아래와 같다. 

컨텐츠 맞춤형




+ (NSString *)convertNumberToHanguleString:(NSString *)numberString {

    NSString *returnString = @"";

    

    if (numberString.length == 0) {

        return returnString;

    }

    //34560

    //삼만사천오백육십

    NSArray *unit1 = [[NSArray alloc] initWithObjects:@"",@"",@"",@"",@"",@"",@"",@"",@"",@"", nil];

    NSArray *unit2 = [[NSArray alloc] initWithObjects:@"",@"",@"", nil];

    NSArray *unit3 = [[NSArray alloc] initWithObjects:@"", @"", @"", nil];

    NSInteger total = numberString.length;

    NSMutableString *rs = [NSMutableString new];

    

    for (int i=0; i < total; i++) {

        NSInteger num = [[numberString substringWithRange:NSMakeRange(i, 1)] integerValue];

        NSInteger temp1 = total-i;

        for (NSInteger j = 0; [unit1 count]; j++) {

            if (num == j) {

                [rs appendString:unit1[j]];

                break;

            }

        }

        

        if (num != 0 && (total-1) != i) { //숫자가 '0'보다 클때만

            

            //,, 단위를 붙힌다.

            NSString *_num1 = [numberString substringWithRange:NSMakeRange(i, (total-i))];

            if (_num1.length %4 == 0) {

                [rs appendString:unit2[2]];

            }

            

            if (_num1.length %4 == 3) {

                [rs appendString:unit2[1]];

            }

            

            if (_num1.length %4 == 2) {

                [rs appendString:unit2[0]];

            }

        }

        

        //,, 단위를 붙인다.

        if (temp1 == 5) {

            [rs appendString:unit3[0]];

        } else if (temp1 == 9) {

            [rs appendString:unit3[1]];

        } else if (temp1 == 13) {

            [rs appendString:unit3[2]];

        }

    }

    

    returnString = (NSString *)rs;

    return returnString;

}


이상. 끝! 



반응형