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