NSNumberFormatter功能很强大,对于一些数字,进行格式化、四舍五入、百分数、本地化拼写、货币符号等等,都可实现,可在枚举中查询
话不多话,上代码
一、下面为系统自带的样式
+ (NSString *)localizedStringFromNumber:(NSNumber *)num numberStyle:(NSNumberFormatterStyle)nstyle
二、主要说下,自定义样式
/// 金额转换为千分位,小数位数传参数(用户用)
/// @param amountStr 待转的文本
/// @param format 格式化样式
/// @param decimal 小数位
+ (NSString *)numberThousandPositive:(NSString *)amountStr format:(NSString *)format withDecimal:(NSString *)decimal {
NSString *amtStr = [amountStr stringByReplacingOccurrencesOfString:@"," withString:@""];
if (amtStr.length <= 0 || [amtStr floatValue] == 0) {
return [NMAmount quantityWithQuantityStr:amountStr withDecimal:decimal];
} else {
NSString *result_positiveFormat = @"";
NSString *firstStr, *lastStr;
NSString *defaultFormat = @"###,###,###.00"; //默认样式
if (format.length > 0 && ![format isEqualToString:@""] && format != nil) {
if ([format containsString:@"."]) {
firstStr = [format componentsSeparatedByString:@"."].firstObject;
lastStr = [format componentsSeparatedByString:@"."].lastObject;
} else {
firstStr = format;
}
if ([firstStr containsString:@"0"]) { //有的服务器返回的数据为:0,000.00 格式的,所以需要转换成#,直接用也可以,但是不够千位格式时时,会以0补齐(exp:123 格式化后:0,123.00)
firstStr = [firstStr stringByReplacingOccurrencesOfString:@"0" withString:@"#"];
}
if (lastStr.length > 0) {
result_positiveFormat = [NSString stringWithFormat:@"%@.%@",firstStr,lastStr];
} else {
result_positiveFormat = firstStr;
}
} else {
result_positiveFormat = defaultFormat;
}
// switch ([decimal integerValue]) {
// case 0:
// str = @"###,###,###";
// break;
// case 1:
// str = @"###,###,###.0";
// break;
// case 2:
// str = @"###,###,###.00";
// break;
// case 3:
// str = @"###,###,###.000";
// break;
// case 4:
// str = @"###,###,###.0000";
// break;
// case 5:
// str = @"###,###,###.00000";
// break;
// case 6:
// str = @"###,###,###.000000";
// break;
// case 7:
// str = @"###,###,###.0000000";
// break;
// default:
// break;
// }
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
[numberFormatter setPositiveFormat:result_positiveFormat];
[numberFormatter setMinimumFractionDigits:lastStr.length >0 ? lastStr.length : decimal.integerValue]; //最少保留几位小数
// [numberFormatter setMinimumIntegerDigits:decimal.integerValue];
// 数字之间的分隔符
// [numberFormatter setDecimalSeparator:@"."];
// [numberFormatter setCurrencyDecimalSeparator:@"`"];
// numberFormatter.locale = [NSLocale currentLocale];
// numberFormatter.usesGroupingSeparator = YES;
// 前缀符号
// numberFormatter.positivePrefix = @"!";
// // 后缀符号
// numberFormatter.positiveSuffix = @"元";
// // 间隙中添加的符号
// numberFormatter.paddingCharacter = @"?";
// // 格式的宽度
// numberFormatter.formatWidth = 15;
// // 最多展示三位整数
// numberFormatter.maximumIntegerDigits = 3;
double textDou = 0.0;
NSNumber *num = [numberFormatter numberFromString:amtStr];
textDou += [num doubleValue];
NSString *retStr = @"";
if (textDou < 1.00) {
retStr = [NMAmount quantityWithQuantityStr:[NSString stringWithFormat:@"%f",textDou] withDecimal:[NSString stringWithFormat:@"%ld",(long)(lastStr.length >0 ? lastStr.length : decimal.integerValue)]];
}else{
retStr = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:textDou]];
}
return retStr;
}
return @"";
}
/// 数量转换,保留几位小数(服务器用)
/// @param quantityStr 待转的文本
/// @param decimal 小数位
+ (NSString *)quantityWithQuantityStr:(NSString *)quantityStr withDecimal:(NSString *)decimal{
double douStr = [[quantityStr stringByReplacingOccurrencesOfString:@"," withString:@""] doubleValue];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"###0.00"];
[numberFormatter setMinimumFractionDigits:decimal.integerValue];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:douStr]];
return formattedNumberString;
}
三、 货币的默认样式
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle : NSNumberFormatterDecimalStyle
[numberFormatter setPositiveFormat:@""];
自定义样式需要注意的:
.符号代表显示小数点的位置。格式和小数有关系的时候用到。
0代表占位,如果这个位置没有数字,则使用0填充。
#代表占位,如果这个位置没有数字,则不显示。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
double number = 0.1234;
[numberFormatter setPositiveFormat:@"00.00"];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:number]];
NSLog(@"%@",formattedNumberString);
// 打印:00.12
double number = 0.1234567890;
[numberFormatter setPositiveFormat:@"##.#####"];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:number]];
NSLog(@"%@",formattedNumberString);
// 打印:.12345
[numberFormatter setPositiveFormat:@"##0.#####"];
则打印:0.12345