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;

提高技能如同提升自信心。
原文地址:https://www.cnblogs.com/chims-liu-touch/p/7953582.html