最近項目中需要前端對金額字符串進行處理,百度了未找到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; }
(不要望了,一個方法,沒有鏈接)