NSNumberFormatter
NSNumberFormatter : NSFormatter
1、系统默认的格式
- 配置格式化行为
// 没试出什么不同来,可能差距不大,不太清楚;
[NSNumberFormatter setDefaultFormatterBehavior:NSNumberFormatterBehaviorDefault];
- 配置格式化样式
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *number = @1234567890.0987654321;
NSString *numberString = [numberFormatter stringFromNumber:numner];
NSLog(@"%@", numberString);
// 枚举
typedef NS_ENUM(NSUInteger, NSNumberFormatterStyle) {
NSNumberFormatterNoStyle, 无格式,四舍五入成整数 1234567890
NSNumberFormatterDecimalStyle, 小数分割形式‘,’分割,保留 3 位小数 1,234,567,890.099
NSNumberFormatterCurrencyStyle, 货币形式 $1,234,567,890.10
NSNumberFormatterPercentStyle, 百分比形式 123,456,789,010%
NSNumberFormatterScientificStyle, 科学记数法 1.23456789009877E9
NSNumberFormatterSpellOutStyle, 英语读法 one billion two hundred...
NSNumberFormatterOrdinalStyle (ios(9.0)), 排序形式,整数后缀 th 1,234,567,890th
NSNumberFormatterCurrencyISOCodeStyle (ios(9.0)), ISOCode(不懂) 342,936:32:30
NSNumberFormatterCurrencyPluralStyle (ios(9.0)), 复杂货币形式 USD1,234,567,890.10
NSNumberFormatterCurrencyAccountingStyle (ios(9.0)), 账户货币形式 1,234,567,890.10 US dollars
};
- 格式化字符串转换成 NSNumber 还是 NSDecimalNumber
numberFormatter.generatesDecimalNumbers = NO;
NSNumber *decimalNumber1 = [numberFormatter numberFromString:string];
numberFormatter.generatesDecimalNumbers = YES;
NSDecimalNumber *decimalNumber2 = (NSDecimalNumber *)[numberFormatter numberFromString:string];
2、格式化转化
- 复杂方式 NSString -> NSNumber
NSNumber *resNumber;
NSError *error;
NSRange range = NSMakeRange(1, 2);
BOOL res = [numberFormatter getObjectValue:&resNumber forString:string range:&range error:&error];
if (res && !error) {
NSLog(@"%@", resNumber);
}
- 简单方式 NSString -> NSNumber
NSNumber *string2Number = [numberFormatter numberFromString:string];
- 简单方式 NSNumber -> NSString
NSString *number2String = [numberFormatter stringFromNumber:numner];
- 最简单方式 NSNumber -> NSString
NSString *number2String2 = [NSNumberFormatter localizedStringFromNumber:numner numberStyle:NSNumberFormatterDecimalStyle];
3、舍入方式
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.roundingMode = NSNumberFormatterRoundHalfEven;// 舍入方式
numberFormatter.roundingIncrement = @100;// 精度,可以是小数
NSString *number2String = [numberFormatter stringFromNumber:@(123345)];
NSLog(@"%@", number2String);
// typedef NS_ENUM(NSUInteger, NSNumberFormatterRoundingMode) {
// NSNumberFormatterRoundCeiling, 正无穷方向
// NSNumberFormatterRoundFloor, 负无穷方向
// NSNumberFormatterRoundDown, 趋近 0 方向
// NSNumberFormatterRoundUp, 远离 0 方向
// NSNumberFormatterRoundHalfEven, 趋近最近数,大小平均,精度留双
// NSNumberFormatterRoundHalfDown, 趋近最近数,大小平均,趋近 0 方向
// NSNumberFormatterRoundHalfUp 趋近最近数,大小平均,远离 0 方向
// };
4、自定义
自定义很多配置都与格式化样式互相关联而又相互制约,比较麻烦;
- 格式
// numberFormatter.formattingContext = @"";// 未知
numberFormatter.formatWidth = 3;// 未知
numberFormatter.positiveFormat = @"¤#,###0.###";// 正数格式(¤ 指代货币符号)
numberFormatter.negativeFormat = @"¤-#,##0.##";// 负数格式()
numberFormatter.multiplier = @(10);// 结果倍数
- 符号
numberFormatter.percentSymbol = @"百分之";
numberFormatter.perMillSymbol = @"perMillSymbol";
numberFormatter.minusSign = @"减";
numberFormatter.plusSign = @"加";
numberFormatter.exponentSymbol = @"指数";
numberFormatter.zeroSymbol = @"零";
numberFormatter.nilSymbol = @"空";
numberFormatter.notANumberSymbol = @"不是一个数";
numberFormatter.negativeInfinitySymbol = @"负无穷";
numberFormatter.positiveInfinitySymbol = @"正无穷";
- 货币
numberFormatter.currencySymbol = @"货币符号";// 与 currencyCode 冲突,优先
numberFormatter.currencyCode = @"EUR";// 货币符号代码
numberFormatter.internationalCurrencySymbol = @"国际货币符号";// 未知
numberFormatter.currencyGroupingSeparator = @"$$";// 代替分隔符,
- 前后缀
numberFormatter.positivePrefix = @"正数前缀";
numberFormatter.positiveSuffix = @"正数后缀";
numberFormatter.negativePrefix = @"负数前缀";
numberFormatter.negativeSuffix = @"负数后缀";
- 分组
numberFormatter.groupingSeparator = @"分组符";
numberFormatter.usesGroupingSeparator = YES;
numberFormatter.decimalSeparator = @"小数点";
numberFormatter.alwaysShowsDecimalSeparator = YES;
numberFormatter.groupingSize = 3;// 1 级分组
numberFormatter.secondaryGroupingSize = 2;// 2 级分组
numberFormatter.currencyGroupingSeparator = @"货币分组符";
- padding(不明所以)
numberFormatter.paddingCharacter = @"??";
numberFormatter.paddingPosition = NSNumberFormatterPadAfterSuffix;
// typedef NS_ENUM(NSUInteger, NSNumberFormatterPadPosition) {
// NSNumberFormatterPadBeforePrefix,
// NSNumberFormatterPadAfterPrefix,
// NSNumberFormatterPadBeforeSuffix,
// NSNumberFormatterPadAfterSuffix
// };
- In Out(不明所以)
numberFormatter.allowsFloats = NO;
numberFormatter.minimum = @(-1000);
numberFormatter.maximum = @(1000);
- 位数
numberFormatter.minimumIntegerDigits = 2;// 最小整数位数
numberFormatter.maximumIntegerDigits = 3;// 最大整数位数
numberFormatter.minimumFractionDigits = 4;// 最小小数位数
numberFormatter.maximumFractionDigits = 5;// 最大小数位数
- 有效位数
numberFormatter.minimumSignificantDigits = 6;// 最小有效位数
numberFormatter.maximumSignificantDigits = 7;// 最大有效位数
- 其他(不明所以)
numberFormatter.lenient = NO;
numberFormatter.partialStringValidationEnabled = NO;