iOS 千分位显示

前言

做项目中经常会遇到将数字转化位千分位显示的情况。之前通过对字符串的处理来达到目的,这种方法逻辑复杂,会出现显示不是自己想要的样子。
原来苹果已经给我们封装了类来帮助我们方便的转化格式。

一、NSNumberFormatter

NSNumberFormatter继承NSFormatter,负责数字模式的显示样式。设置numberStyle来设置显示的样式。
如设置为:NSNumberFormatterDecimalStyle

double number = 123456.6789;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
formatter.numberStyle =NSNumberFormatterDecimalStyle;
NSString *newAmount = [formatter stringFromNumber:[NSNumber numberWithDouble:number]];
// 打印:123,456.679

其他样式选项:

typedef NS_ENUM(NSUInteger, NSNumberFormatterStyle) {
    NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
    NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
    NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
    NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
    NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
    NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle,
    NSNumberFormatterOrdinalStyle API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) = kCFNumberFormatterOrdinalStyle,
    NSNumberFormatterCurrencyISOCodeStyle API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) = kCFNumberFormatterCurrencyISOCodeStyle,
    NSNumberFormatterCurrencyPluralStyle API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) = kCFNumberFormatterCurrencyPluralStyle,
    NSNumberFormatterCurrencyAccountingStyle API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) = kCFNumberFormatterCurrencyAccountingStyle,
};
二、自定义样式

通过方法setPositiveFormat:可以设置自己想要的样式。
如:千分位,且保留两位小数。

double number = 123456.6789;
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"###,##0.00"];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:number]];
NSLog(@"%@",formattedNumberString);
// 打印:123,456.68

大家可能对格式中的符号代表的含义不是很清楚,这里讲一下我的理解。

  • .符号代表显示小数点的位置。格式和小数有关系的时候用到。
  • 0代表占位,如果这个位置没有数字,则使用0填充。如:
double number = 0.6789;
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"00.00"];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:number]];
NSLog(@"%@",formattedNumberString);
//打印:00.68
  • #代表占位。如果这个位置没有数字,则不显示。如:
    例1:
double number = 0.6789;
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"##.00"];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:number]];
NSLog(@"%@",formattedNumberString);
// 打印:.68

例2:

double number = 0.6789000000;
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"##.#####"];
NSString *formattedNumberString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:number]];
NSLog(@"%@",formattedNumberString);
//打印:0.6789

参考资料:
https://unicode.org/reports/tr35/tr35-6.html#Number_Format_Patterns

猜你喜欢

转载自blog.csdn.net/tianxiawoyougood/article/details/81190931