NSNumberFormatter
NSNumberFormatter看起来跟NSDateFormatter有些类似,它主要的工作就是解决一些四舍五入,数据格式化显示的问题.
在不了解NSNumberFormatter之前我们我们进行四舍五入的方式就是,先数据移位到需要保留的位置,然后加0.5取整,再移位.比如123.456,如果我们需要直接取整就加0.5然后保留整数.
即:123.456+0.5=123.956; (int)123.956 = 123;
如果我需要的是保留一位小数,那么就是先乘10左移然后取整还原,
即:123.456*10+0.5=1235.06;(int)1235.06 = 1235;再右移得123.5;
但是使用NSNumberFormatter,只需要使用类方法
+ (NSString *)localizedStringFromNumber:(NSNumber *)num numberStyle:(NSNumberFormatterStyle)nstyle;便可更简单的得到.
另还有两个方法
- (nullable NSString *)stringFromNumber:(NSNumber *)number;
- (nullable NSNumber *)numberFromString:(NSString *)string;
NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle, // 四舍五入的整数
NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,// 小数形式,保留3位
NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,// 货币形式 -- 本地化,默认$符号,两位小数
NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,// 百分数形式 乘以100取整加%
NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,// 科学计数 即123.4567 = 1.23456
NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle,
NSNumberFormatterOrdinalStyle API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) = kCFNumberFormatterOrdinalStyle,// 序数形式 如123th
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,// 货币形式用以US结尾
NSNumberFormatterCurrencyAccountingStyle API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) = kCFNumberFormatterCurrencyAccountingStyle,// 会计计数跟NSNumberFormatterCurrencyStyle相似
// 小数点样式
numberFormatter.decimalSeparator = @".";
// 指定符号,与我们在前面类方法中说明的一致
NSLog(@"货币代码%@",numberFormatter.currencyCode); // 货币代码USD
NSLog(@"货币符号%@",numberFormatter.currencySymbol); // 货币符号$
NSLog(@"国际货币符号%@",numberFormatter.internationalCurrencySymbol); // 国际货币符号USD
NSLog(@"百分比符号%@",numberFormatter.percentSymbol); // 百分比符号%
NSLog(@"千分号符号%@",numberFormatter.perMillSymbol); // 千分号符号‰
NSLog(@"减号符号%@",numberFormatter.minusSign); // 减号符号-
NSLog(@"加号符号%@",numberFormatter.plusSign); // 加号符号+
NSLog(@"指数符号%@",numberFormatter.exponentSymbol); // 指数符号E
// 零的样式
numberFormatter.zeroSymbol = @"-";
// 填充位置
numberFormatter.paddingPosition = kCFNumberFormatterPadBeforeSuffix;
numberFormatter.positiveSuffix = @"元";
NSLog(@"%@",[numberFormatter numberFromString:@"10000000元"]); // 10000000
// 整数最多位数
numberFormatter.maximumIntegerDigits = 10;
// 整数最少位数
numberFormatter.minimumIntegerDigits = 2;
// 小数位最多位数
numberFormatter.maximumFractionDigits = 3;
// 小数位最少位数
numberFormatter.minimumFractionDigits = 1;
// 数字分割的尺寸
numberFormatter.groupingSize = 4;
// 除了groupingSize决定的尺寸外,其他数字位分割的尺寸
numberFormatter.secondaryGroupingSize = 2;
// 最大有效数字个数
numberFormatter.maximumSignificantDigits = 12;
// 最少有效数字个数
numberFormatter.minimumSignificantDigits = 3;
NSLog(@"正数%@,负数%@",[numberFormatter stringFromNumber:@(+12135230.2346)],[numberFormatter stringFromNumber:@(-12135231.2346)]); // 正数!12,13,5230.2346元,负数@12,13,5231.2346亏
NSLog(@"零 = %@",[numberFormatter stringFromNumber:@(0)]); // 零 = -
// 舍入值,比如以10为进位值,那么156就进位为160,154进位为150
numberFormatter.roundingIncrement = @10;