系统提供的样式
NSString *string = @"123456.654321";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = kCFNumberFormatterCurrencyStyle;
NSNumber *number = [NSNumber numberWithDouble:string.doubleValue];
NSString *result = [formatter stringFromNumber:number];
NSLog(@"result is:%@",result);
typedef CF_ENUM(CFIndex, CFNumberFormatterStyle) { // number format styles
kCFNumberFormatterNoStyle = 0, // 自末位开始四舍五入至整数位 123457
kCFNumberFormatterDecimalStyle = 1, // 小数点后最多3位 123,456.654
kCFNumberFormatterCurrencyStyle = 2, // 国际化货币格式 符号与手机系统地区设置有关 $123,456.65
kCFNumberFormatterPercentStyle = 3, // 末位由千分位四舍五入得到12,345,665%
kCFNumberFormatterScientificStyle = 4, // 1.23456654321E5
kCFNumberFormatterSpellOutStyle = 5, // 与项目的国际化语言设置有关 项目支持多个则取第一个语言设置 十二万三千四百五十六点六五四三二一
kCFNumberFormatterOrdinalStyle = 6, // 与项目的国际化语言设置有关 末位由十分位四舍五入得到 123,457th
kCFNumberFormatterCurrencyISOCodeStyle = 8, // 前缀与手机系统地区设置有关 CNY123,456.65
kCFNumberFormatterCurrencyPluralStyle = 9, // 后缀与手机系统地区设置有关 后缀使用的语言与项目的国际化语言设置有关 末位由千分位四舍五入得到 123,456.56 US dollars
kCFNumberFormatterCurrencyAccountingStyle = 10, // 前缀与手机系统地区设置有关 末位由千分位四舍五入得到 ¥123,456.65 US$123,456.65
};
自定义样式
关于数字特殊字符 0 和 #的一些简单说明
#是一个特殊字符,用于数字部分(相当于占位符);它表示显示数字,但是最首位的0不予显示。
#用于整数部分没有数位的限制,但是用于小数部分,却有“最多只能有多少位小数的意思”,多余的进行四舍五入。
NSString *string = @"0123456.654555";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.positiveFormat = @",###.##";
NSNumber *number = [NSNumber numberWithDouble:string.doubleValue];
NSString *result = [formatter stringFromNumber:number];
NSLog(@"result is:%@",result); // 123,456.65
formatter.positiveFormat = @"#.###";
NSNumber *number2 = [NSNumber numberWithDouble:string.doubleValue];
NSString *result2 = [formatter stringFromNumber:number2];
NSLog(@"result2 is:%@", result2); // 123456.655
0和#的用法是相近的,却又略有不同;不同之处在于:
对于整数部分,0限制整数部分最少出现的位数,不足补0,多出的不变,但是最首位的0不予显示。
对于小数部分,0限制小数部分最少出现的位数,不足补0,多出的五舍六入。
NSString *string = @"027.65";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.positiveFormat = @"0000.0000";
NSNumber *number = [NSNumber numberWithDouble:string.doubleValue];
NSString *result = [formatter stringFromNumber:number];
NSLog(@"result is:%@",result); // 0027.6500
formatter.positiveFormat = @"0.0";
NSNumber *number2 = [NSNumber numberWithDouble:string.doubleValue];
NSString *result2 = [formatter stringFromNumber:number2];
NSLog(@"result2 is:%@", result2); // 27.6
其他的特殊样式符号见下表:
符号 | 位置 | 本地化 | 含义 |
---|---|---|---|
0 | 数字 | 是 | 阿拉伯数字 |
# | 数字 | 是 | 阿拉伯数字 |
. | 数字 | 是 | 小数分隔符或货币小数分隔符 |
- | 数字 | 是 | 减号 |
, | 数字 | 是 | 分组分隔符 |
E | 数字 | 是 | 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。 |
; | 子模式边界 | 是 | 分隔正数和负数子模式 |
% | 前缀或后缀 | 是 | 乘以 100 并显示为百分数 |
‰ | 前缀或后缀 | 是 | 乘以 1000 并显示为千分数 |
¤ (\u00A4) | 前缀或后缀 | 否 | 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。 |
' | 前缀或后缀 | 否 | 用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号:"# o''clock"。 |
常用自定义样式
NSString *string = @"5277";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
// 转化为小数点后两位,并前面添加固定货币符号¥
formatter.positiveFormat = @"¥0.00";
NSNumber *number = [NSNumber numberWithDouble:string.doubleValue];
NSString *result = [formatter stringFromNumber:number];
NSLog(@"result is:%@",result); // ¥5277.00
// 转化为小数点后两位,并前面添加固定货币符号¥,并3位一组表示货币
formatter.positiveFormat = @"¥,##0.00";
NSNumber *number2 = [NSNumber numberWithDouble:string.doubleValue];
NSString *result2 = [formatter stringFromNumber:number2];
NSLog(@"result2 is:%@",result2); // ¥5,277.00
// 转化为百分数
string = @"0.5277";
formatter.positiveFormat = @"0%";
NSNumber *number3 = [NSNumber numberWithDouble:string.doubleValue];
NSString *result3 = [formatter stringFromNumber:number3];
NSLog(@"result3 is:%@",result3); // 53%
// 转化为百分数,并保留一位小数
formatter.positiveFormat = @"0.0%";
NSNumber *number4 = [NSNumber numberWithDouble:string.doubleValue];
NSString *result4 = [formatter stringFromNumber:number4];
NSLog(@"result4 is:%@",result4); // 52.8%
// 添加任意字符
formatter.positiveFormat = @"陈拾柒 0.0% 到此一游";
NSNumber *number5 = [NSNumber numberWithDouble:string.doubleValue];
NSString *result5 = [formatter stringFromNumber:number5];
NSLog(@"result5 is:%@",result5); // 陈拾柒 52.8% 到此一游
网友评论