美文网首页iOS开发技巧iOS开发知识小集iOS开发笔记
ios NSNumberFormatter 金额格式处理 包含逗

ios NSNumberFormatter 金额格式处理 包含逗

作者: 骨古 | 来源:发表于2017-10-27 17:41 被阅读598次

    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元
    

    传送门

    相关文章

      网友评论

      本文标题:ios NSNumberFormatter 金额格式处理 包含逗

      本文链接:https://www.haomeiwen.com/subject/wuldpxtx.html