- (NSString *)rmbUppercase{
if (self.length == 0) {
return @"";
}
NSString *operateString = [self copy];
NSString *retString = @"整";
if ([self containsString:@"."]) {
if ([operateString componentsSeparatedByString:@"."][1].length > 2) {
//小数点后超出
NSRange dotRange = [self rangeOfString:@"."];
operateString = [self substringToIndex:dotRange.location + 3];
}
//小数部分
NSRange operateStringDotRange = [operateString rangeOfString:@"."];
if (operateStringDotRange.location == operateString.length - 3) {
//角和分都有
NSString *fen = [operateString substringWithRange:NSMakeRange(operateStringDotRange.location + 2, 1)];
NSString *jiao = [operateString substringWithRange:NSMakeRange(operateStringDotRange.location + 1, 1)];
if ([fen integerValue] > 0) {
retString = [NSString stringWithFormat:@"%@分",[self uppercaseNumber:[fen integerValue]]];
retString = [NSString stringWithFormat:@"%@%@%@",[self uppercaseNumber:[jiao integerValue]],[jiao integerValue] > 0?@"角":@"",retString];
}else{
if ([jiao integerValue] > 0) {
retString = [NSString stringWithFormat:@"%@角",[self uppercaseNumber:[jiao integerValue]]];
}
}
}else if (operateStringDotRange.location == operateString.length - 2){
//只有角
NSString *jiao = [operateString substringWithRange:NSMakeRange(operateStringDotRange.location + 1, 1)];
if ([jiao integerValue] > 0) {
retString = [NSString stringWithFormat:@"%@角",[self uppercaseNumber:[jiao integerValue]]];
}
}
//小数部分处理完毕,开始处理整数部分
operateString = [self componentsSeparatedByString:@"."][0];
}
//整数部分>0时要有圆,整数部分和小数部分均为0时也要有圆
if ([operateString integerValue] > 0 || retString.length <= 1) {
retString = [NSString stringWithFormat:@"圆%@",retString];
}
NSArray *sectionNames = @[@"",@"万",@"亿"];
NSArray *charNames = @[@"",@"拾",@"佰",@"仟"];
NSMutableArray *bigSectionStrings = [NSMutableArray array];
//大格位处理--倒序截出大格位
NSString *bigTempString = nil;
for (NSInteger i = 0; i < operateString.length; i ++) {
NSString *bigIndexChar = [operateString substringWithRange:NSMakeRange(operateString.length - 1 - i, 1)];
if (bigTempString.length < 8) {
bigTempString = [NSString stringWithFormat:@"%@%@",bigIndexChar,bigTempString.length > 0?bigTempString:@""];
}
//截出大格位
if (i == operateString.length - 1 || i%8 == 7) {
[bigSectionStrings insertObject:bigTempString atIndex:0];
bigTempString = nil;
}
}
NSString *bigPrefixString = @"";
//将各大格位数字变成大写,然后衔接
for (NSInteger k = 0; k < bigSectionStrings.count; k ++) {
NSString *bigSectionString = bigSectionStrings[k];
NSString *retPrefixString = @"";
//格位处理---倒序截出格位
NSMutableArray *sectionStrings = [NSMutableArray array];
NSString *tempString = @"";
for (NSInteger i = 0; i < bigSectionString.length; i ++) {
NSString *indexChar = [bigSectionString substringWithRange:NSMakeRange(bigSectionString.length - 1 - i, 1)];
//拼接字符串
if (tempString.length < 4) {
tempString = [NSString stringWithFormat:@"%@%@",indexChar,tempString.length > 0?tempString:@""];
}
//截出格位
if (i == bigSectionString.length - 1 || i%4 == 3){
[sectionStrings insertObject:tempString atIndex:0];
tempString = nil;
}
}
//将各格位数字变成大写,然后衔接
for (NSInteger i = 0; i < sectionStrings.count; i ++) {
NSString *sectionString = sectionStrings[i];
NSString *upperSectionString = @"";
for (NSInteger j = 0; j < sectionString.length; j ++) {
NSString *indexChar = [sectionString substringWithRange:NSMakeRange(j, 1)];
if ([indexChar integerValue] > 0) {
NSString *tailString = [NSString stringWithFormat:@"%@%@",[self uppercaseNumber:[indexChar integerValue]],charNames[sectionString.length - 1 - j]];
upperSectionString = [upperSectionString stringByAppendingString:tailString];
}else if (![upperSectionString hasSuffix:@"零"]){
upperSectionString = [upperSectionString stringByAppendingString:@"零"];
}
}
//如果格位整理后的数据以“零”结尾而且不等于“零”,则去掉尾零
if (upperSectionString.length > 1 && [upperSectionString hasSuffix:@"零"]) {
upperSectionString = [upperSectionString substringToIndex:upperSectionString.length - 1];
}
//补充格位尾单位 万/亿/兆...
if (![upperSectionString isEqualToString:@"零"]) {
if (sectionStrings.count - 1 - i < sectionNames.count) {
//该条件判断其实是多余的
upperSectionString = [upperSectionString stringByAppendingString:sectionNames[sectionStrings.count - 1 - i]];
}
}
//已经获得格位大写字符,开始衔接各个格位
if ([upperSectionString hasPrefix:@"零"] && [retPrefixString hasSuffix:@"零"]) {
upperSectionString = [upperSectionString substringFromIndex:1];
}
retPrefixString = [retPrefixString stringByAppendingString:upperSectionString];
}
//大格位衔接
if (retPrefixString.length > 1 && [retPrefixString hasSuffix:@"零"]) {
retPrefixString = [retPrefixString substringToIndex:retPrefixString.length - 1];
}
//补充大格位单位:亿
if (k < bigSectionStrings.count - 1) {// && ![retPrefixString isEqualToString:@"零"]
retPrefixString = [retPrefixString stringByAppendingString:@"亿"];
}
//已经获得大格位大写字符,开始衔接各个大格位
if ([retPrefixString isEqualToString:@"零亿"]) {
retPrefixString = [retPrefixString substringFromIndex:1];
bigPrefixString = [bigPrefixString stringByAppendingString:retPrefixString];
}else{
bigPrefixString = [bigPrefixString stringByAppendingString:retPrefixString];
}
}
//整数部分“圆”前的“零去掉”
if ([bigPrefixString hasSuffix:@"零"] && bigPrefixString.length > 0) {
bigPrefixString = [bigPrefixString substringToIndex:bigPrefixString.length - 1];
}
//整数部分头部的“零去掉”
if ([bigPrefixString hasPrefix:@"零"] && bigPrefixString.length > 0) {
bigPrefixString = [bigPrefixString substringFromIndex:1];
}
//和小数部分整合
retString = [bigPrefixString stringByAppendingString:retString];
//当整数部分无生成字段
if ([retString hasPrefix:@"圆"]) {
retString = [NSString stringWithFormat:@"零%@",retString];
}
if ([retString hasPrefix:@"零"] && ![retString hasPrefix:@"零圆"]) {
retString = [retString substringFromIndex:1];
}
return retString;
}
- (NSString *)uppercaseNumber:(NSInteger)number{
switch (number) {
case 0:return @"零";
case 1:return @"壹";
case 2:return @"贰";
case 3:return @"叁";
case 4:return @"肆";
case 5:return @"伍";
case 6:return @"陆";
case 7:return @"柒";
case 8:return @"捌";
case 9:return @"玖";
default:return nil;
break;
}
}