zoukankan      html  css  js  c++  java
  • 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;
    }
    

    (不要望了,一个方法,没有链接)

  • 相关阅读:
    [Swift]LeetCode806. 写字符串需要的行数 | Number of Lines To Write String
    [Swift]LeetCode805. 数组的均值分割 | Split Array With Same Average
    [Swift]LeetCode804. 唯一摩尔斯密码词 | Unique Morse Code Words
    [Swift]LeetCode803. 打砖块 | Bricks Falling When Hit
    [Swift]LeetCode802. 找到最终的安全状态 | Find Eventual Safe States
    [Swift]LeetCode801. 使序列递增的最小交换次数 | Minimum Swaps To Make Sequences Increasing
    [Swift]LeetCode799. 香槟塔 | Champagne Tower
    [Swift]LeetCode798. 得分最高的最小轮调 | Smallest Rotation with Highest Score
    [Swift]LeetCode797. 所有可能的路径 | All Paths From Source to Target
    转:12C PDB 配置不同的PDB监听端口
  • 原文地址:https://www.cnblogs.com/CF-STRONG/p/5940983.html
Copyright © 2011-2022 走看看