#pragma mark - 数字金额转大写
-(NSString *)getCnMoneyByString:(NSString*)string
{
// 设置数据格式
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
// NSLocale的意义是将货币信息、标点符号、书写顺序等进行包装,如果app仅用于中国区应用,为了保证当用户修改语言环境时app显示语言一致,则需要设置NSLocal(不常用)
numberFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
// 全拼格式
[numberFormatter setNumberStyle:NSNumberFormatterSpellOutStyle];
// 小数点后最少位数
[numberFormatter setMinimumFractionDigits:2];
// 小数点后最多位数
[numberFormatter setMaximumFractionDigits:6];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehaviorDefault];
//
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[string doubleValue]]];
//通过NSNumberFormatter转换为大写的数字格式 eg:一千二百三十四
//替换大写数字转为金额
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"一" withString:@"壹"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"二" withString:@"贰"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"三" withString:@"叁"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"四" withString:@"肆"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"五" withString:@"伍"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"六" withString:@"陆"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"七" withString:@"柒"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"八" withString:@"捌"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"九" withString:@"玖"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"〇" withString:@"零"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"千" withString:@"仟"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"百" withString:@"佰"];
formattedNumberString = [formattedNumberString stringByReplacingOccurrencesOfString:@"十" withString:@"拾"];
// 对小数点后部分单独处理
// rangeOfString 前面的参数是要被搜索的字符串,后面的是要搜索的字符
if ([formattedNumberString rangeOfString:@"点"].length>0)
{
// 将“点”分割的字符串转换成数组,这个数组有两个元素,分别是小数点前和小数点后
NSArray* arr = [formattedNumberString componentsSeparatedByString:@"点"];
// 如果对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。
// 这里指的是深拷贝
NSMutableString* lastStr = [[arr lastObject] mutableCopy];
NSLog(@"---%@---长度%ld", lastStr, lastStr.length);
if (lastStr.length>=2)
{
// 在最后加上“分”
[lastStr insertString:@"分" atIndex:lastStr.length];
}
if (![[lastStr substringWithRange:NSMakeRange(0, 1)] isEqualToString:@"零"])
{
// 在小数点后第一位后边加上“角”
[lastStr insertString:@"角" atIndex:1];
}
// 在小数点左边加上“元”
formattedNumberString = [[arr firstObject] stringByAppendingFormat:@"元%@",lastStr];
}
else // 如果没有小数点
{
formattedNumberString = [formattedNumberString stringByAppendingString:@"元"];
}
return formattedNumberString;
}