NSNumberFormatter
可以通过NSNumberFormatter,同样可以设置NSNumber输出的格式
比如123,456,789 或者 123 456 789
NSNumber *number = @(123456789.6789);
2017-10-27 17:20:59.064200+0800 NSNumberFormatter的使用[59895:2506616] No Style = 123456790
2017-10-27 17:20:59.064354+0800 NSNumberFormatter的使用[59895:2506616] Decimal Style = 123,456,789.679
2017-10-27 17:20:59.064436+0800 NSNumberFormatter的使用[59895:2506616] Currency Style = $123,456,789.68
2017-10-27 17:20:59.064537+0800 NSNumberFormatter的使用[59895:2506616] Percent Style = 12,345,678,968%
2017-10-27 17:20:59.064626+0800 NSNumberFormatter的使用[59895:2506616] Scientific Style = 1.234567896789E8
2017-10-27 17:20:59.064720+0800 NSNumberFormatter的使用[59895:2506616] Spell Out Style = one hundred twenty-three million four hundred fifty-six thousand seven hundred eighty-nine point six seven eight nine
2017-10-27 17:20:59.064828+0800 NSNumberFormatter的使用[59895:2506616] Ordinal Style = 123,456,790th
2017-10-27 17:20:59.064916+0800 NSNumberFormatter的使用[59895:2506616] Currency ISO Style = USD123,456,789.68
2017-10-27 17:20:59.065019+0800 NSNumberFormatter的使用[59895:2506616] Currency plural Style = 123,456,789.68 US dollars
2017-10-27 17:20:59.065107+0800 NSNumberFormatter的使用[59895:2506616] Currency accounting Style = $123,456,789.68
NSNumberFormatter类有个属性numberStyle,它是一个枚举型,设置不同的值可以输出不同的数字格式。该枚举包括
NSNumber *number = @(123456789.6789);
enum {
NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle, //无格式,四舍五入,输出123456790
NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle, //小数型,保留小数输出123,456,789.679
NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle, //货币型,加上了人民币标志,原值输出$123,456,789.68
NSNumberFormatter
NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle, //百分比型,本身数值乘以100后用百分号表示,输出12,345,678,968%
NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle, //科学计数型,原值表示,输出1.234567896789E8
NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle //全拼,原值的中文表示,
};
typedef NSUInteger NSNumberFormatterStyle;
NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
numberFormatter.numberStyle.rawValue // numberStyle 0
numberFormatter.locale.localeIdentifier // 语言环境 语言环境
numberFormatter.generatesDecimalNumbers // 是否生成小数 false
numberFormatter.formatterBehavior.rawValue // formatterBehavior 1,040
numberFormatter.negativeFormat // 负格式 "#"
numberFormatter.textAttributesForNegativeValues // textAttributesForNegativeValues nil
numberFormatter.positiveFormat // 正格式 "#"
numberFormatter.textAttributesForPositiveValues // textAttributesForPositiveValues nil
numberFormatter.allowsFloats // 是否允许浮点值 true
numberFormatter.decimalSeparator // 小数分隔符 "."
numberFormatter.alwaysShowsDecimalSeparator // 是否始终显示小数分隔符 false
numberFormatter.currencyDecimalSeparator // 货币小数分隔符 "."
numberFormatter.usesGroupingSeparator // 是否采用分组分隔符 false
numberFormatter.groupingSeparator // 分组分隔符 ","
numberFormatter.zeroSymbol // 零符号 nil
numberFormatter.textAttributesForZero // 文本属性 nil
numberFormatter.nilSymbol // nil符号 ""
numberFormatter.textAttributesForNil // 文本属性 nil
numberFormatter.notANumberSymbol // 非数字符号 "NaN"
numberFormatter.textAttributesForNotANumber // 文本属性 nil
numberFormatter.positiveInfinitySymbol // 正无穷大符号 "+∞"
numberFormatter.textAttributesForPositiveInfinity // 文本属性 nil
numberFormatter.negativeInfinitySymbol // 负无穷大符号 "+∞"
numberFormatter.textAttributesForNegativeInfinity // 文本属性 nil
numberFormatter.positivePrefix // 正前缀 ""
numberFormatter.positiveSuffix // 正后缀 ""
numberFormatter.negativePrefix // 负前缀 "-"
numberFormatter.negativeSuffix // 负后缀 ""
numberFormatter.currencyCode // 货币代码 "USD"
numberFormatter.currencySymbol // 货币符号 "$"
numberFormatter.internationalCurrencySymbol // 国际货币符号 "USD"
numberFormatter.percentSymbol // 百分号符号 "%"
numberFormatter.perMillSymbol // 千分号符号 "‰"
numberFormatter.minusSign // 减号 "-"
numberFormatter.plusSign //加号 "+"
numberFormatter.exponentSymbol // 指数符号 "E"
numberFormatter.groupingSize // 分组大小 0
numberFormatter.secondaryGroupingSize // 第二分组大小 0
numberFormatter.multiplier // 乘数 nil
numberFormatter.formatWidth // 格式宽度 0
numberFormatter.paddingCharacter // 填充字符 "*"
numberFormatter.paddingPosition.rawValue // 填充位置 0
numberFormatter.roundingIncrement // 舍入增量 0
numberFormatter.minimumIntegerDigits // 最小的整数位 0
numberFormatter.maximumIntegerDigits // 最大的整数位 42
numberFormatter.minimumFractionDigits // 最小的小数位数 0
numberFormatter.maximumFractionDigits // 最大的小数位数 0
numberFormatter.minimum // 最小值 nil
numberFormatter.maximum // 最大值 nil
numberFormatter.currencyGroupingSeparator // 货币分组符号 ","
numberFormatter.lenient // false
numberFormatter.usesSignificantDigits // 是否使用有效数字 false
numberFormatter.minimumSignificantDigits // 最小有效数字 1
numberFormatter.maximumSignificantDigits // 最大有效数字 6
numberFormatter.partialStringValidationEnabled // 是否部分字符串验证启用 false
// ==================== 设置属性 ====================
NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
numberFormatter.groupingSize = 4; // 数字分割的尺寸
numberFormatter.usesGroupingSeparator = true;
numberFormatter.groupingSeparator = @" "; //数字分割的格式
NSNumber *number = @(123456789);
NSString *spaceStr = [numberFormatter stringFromNumber:number];
NSLog(@"空格 ---- %@",spaceStr);
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
// 格式宽度
numberFormatter.formatWidth = 15;
// 填充符
numberFormatter.paddingCharacter = @"?";
// 填充位置
numberFormatter.paddingPosition = kCFNumberFormatterPadBeforeSuffix;
numberFormatter.positiveSuffix = @"元";
NSLog(@"%@",[numberFormatter numberFromString:@"10000000元"]); // 10000000
// 貌似没什么用
numberFormatter.allowsFloats = NO;
numberFormatter.alwaysShowsDecimalSeparator = NO;
numberFormatter.maximum = @1000;
numberFormatter.minimum = @100;
// 小数点样式
numberFormatter.decimalSeparator = @".";
// 零的样式
numberFormatter.zeroSymbol = @"-";
// 前缀和后缀
numberFormatter.positivePrefix = @"!";
numberFormatter.positiveSuffix = @"元";
numberFormatter.negativePrefix = @"@";
numberFormatter.negativeSuffix = @"亏";
// 指定符号,与我们在前面类方法中说明的一致
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.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;
// 舍入方式
numberFormatter.roundingMode = kCFNumberFormatterRoundHalfUp;
NSLog(@"%@",[numberFormatter stringFromNumber:@123456.7890]); // !12,3460元
传送门