iOS數字字符串轉大寫金額字符串(OC)


最近項目中需要前端對金額字符串進行處理,百度了未找到OC版本的。所以自己寫了一個小算法,經過測試沒出現啥問題。直接上代碼。
-(NSString *)toCapitalLetters:(NSString *)money
{
    //首先轉化成標准格式        “200.23”
    NSMutableString *tempStr=[[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"%.2f",[money doubleValue]]];
    //位
    NSArray *carryArr1=@[@"元", @"拾", @"佰", @"仟", @"萬", @"拾", @"佰", @"仟", @"億", @"拾", @"佰", @"仟", @"兆", @"拾", @"佰", @"仟" ];
    NSArray *carryArr2=@[@"分",@"角"];
    //數字
    NSArray *numArr=@[@"零", @"壹", @"貳", @"叄", @"肆", @"伍", @"陸", @"柒", @"捌", @"玖"];

    NSArray *temarr = [tempStr componentsSeparatedByString:@"."];
    //小數點前的數值字符串
    NSString *firstStr=[NSString stringWithFormat:@"%@",temarr[0]];
    //小數點后的數值字符串
    NSString *secondStr=[NSString stringWithFormat:@"%@",temarr[1]];

    //是否拼接了“零”,做標記
    bool zero=NO;
    //拼接數據的可變字符串
    NSMutableString *endStr=[[NSMutableString alloc] init];

    /**
    *  首先遍歷firstStr,從最高位往個位遍歷    高位----->個位
    */

    for(int i=(int)firstStr.length;i>0;i--)
    {
        //取最高位數
        NSInteger MyData=[[firstStr substringWithRange:NSMakeRange(firstStr.length-i, 1)] integerValue];

        if ([numArr[MyData] isEqualToString:@"零"]) {

            if ([carryArr1[i-1] isEqualToString:@"萬"]||[carryArr1[i-1] isEqualToString:@"億"]||[carryArr1[i-1] isEqualToString:@"元"]||[carryArr1[i-1] isEqualToString:@"兆"]) {
                //去除有“零萬”
                if (zero) {
                    endStr =[NSMutableString stringWithFormat:@"%@",[endStr substringToIndex:(endStr.length-1)]];
                    [endStr appendString:carryArr1[i-1]];
                    zero=NO;
                }else{
                    [endStr appendString:carryArr1[i-1]];
                    zero=NO;
                }

                //去除有“億萬”、"兆萬"的情況
                if ([carryArr1[i-1] isEqualToString:@"萬"]) {
                    if ([[endStr substringWithRange:NSMakeRange(endStr.length-2, 1)] isEqualToString:@"億"]) {
                        endStr =[NSMutableString stringWithFormat:@"%@",[endStr substringToIndex:endStr.length-1]];
                    }

                    if ([[endStr substringWithRange:NSMakeRange(endStr.length-2, 1)] isEqualToString:@"兆"]) {
                        endStr =[NSMutableString stringWithFormat:@"%@",[endStr substringToIndex:endStr.length-1]];
                    }

                }
                //去除“兆億”
                if ([carryArr1[i-1] isEqualToString:@"億"]) {
                    if ([[endStr substringWithRange:NSMakeRange(endStr.length-2, 1)] isEqualToString:@"兆"]) {
                        endStr =[NSMutableString stringWithFormat:@"%@",[endStr substringToIndex:endStr.length-1]];
                    }
                }


            }else{
                if (!zero) {
                    [endStr appendString:numArr[MyData]];
                    zero=YES;
                }

            }

        }else{
            //拼接數字
            [endStr appendString:numArr[MyData]];
            //拼接位
            [endStr appendString:carryArr1[i-1]];
            //不為“零”
            zero=NO;
        }
    }

    /**
    *  再遍歷secondStr    角位----->分位
    */

    if ([secondStr isEqualToString:@"00"]) {
        [endStr appendString:@"整"];
    }else{
        for(int i=(int)secondStr.length;i>0;i--)
        {
            //取最高位數
            NSInteger MyData=[[secondStr substringWithRange:NSMakeRange(secondStr.length-i, 1)] integerValue];

            [endStr appendString:numArr[MyData]];
            [endStr appendString:carryArr2[i-1]];
        }
    }

    return endStr;
}

(不要望了,一個方法,沒有鏈接)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM