Swift-NumberFormatter的简单使用

NumberFormatter 看名字就知道是數字格式化,NumberFormatter实例用于格式化文本进行单元化显示。

1:NSNumberFormatter提供了两个非常便利的方法
open func string(from number: NSNumber) -> String? 根据NSNumber得到String
open func number(from string: String) -> NSNumber? 根据String得到NSNumber
使用NSNumberFormatter可以将NSNumber转化成自己想要的格式来进行输出,同时NSNumberFormatter也支持使用NSString 类型的对象转换为NSNumber类型的对象
 
2:如果想创建一个本地字符串来表示NSNumber值,不需要创建NSNumberFormatter对象,我们可以使用类方法 
open class func localizedString(from num: NSNumber, number nstyle: NumberFormatter.Style) -> String

3:如果我们在解析String的时候有复杂的要求,我们可以使用如下方法,该方法允许我们指定被解析的字符串范围。
open func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for string: String, range rangep: UnsafeMutablePointer<NSRange>?) throws 
 
4:使用格式化字符串来指定自定义格式,格式化字符串使用的格式模式来自于编码技术标准(Unicode Technical Standard),格式模式可以参考这里。注意格式模式必须在单引号(‘’)之间,我们可以使用  open var negativeFormat: String!open var positiveFormat: String!这两个属性来设置格式化字符串,一些常用的操作符表示的意思:
 
 . 
表示小数点的位置
 
逗号表示千分位显示的位置
 0 
表示补0,如果NSNumber太短,将进行补0操作,
 # 
表示没有填充,如果NSNumber太短,那么这里什么都没有
 ¤ 
表示货币符号显示在这里

常用的小例子:

1:设置number的显示样式,下面number值为1234.5678

  func numberFormatter(number: NSNumber) {
        //四舍五入的整数
        let numberNoneStyleStr = NumberFormatter.localizedString(from: number, number: .none)
        //小数形式,以国际化格式输出 保留三位小数,第四位小数四舍五入
        let numberDecimalStyleStr = NumberFormatter.localizedString(from: number, number: .decimal)
        //货币形式 -- 本地化 以货币通用格式输出 保留2位小数,第三位小数四舍五入,在前面添加dollor符号 $
        let numberCurrencyStyleStr = NumberFormatter.localizedString(from: number, number: .currency)
        //百分数形式
        let numberPercentStyleStr = NumberFormatter.localizedString(from: number, number: .percent)
        //科学计数
        let numberScientificStyleStr = NumberFormatter.localizedString(from: number, number: .scientific)
        //朗读形式 -- 本地化 英文表示
        let numberSpellOutStyleStr = NumberFormatter.localizedString(from: number, number: .spellOut)
        //序数形式 -- 本地化
        let numberOrdinalStyleStr = NumberFormatter.localizedString(from: number, number: .ordinal)
        //货币形式 ISO -- 本地化
        let numberCurrencyISOStyleStr = NumberFormatter.localizedString(from: number, number: .currencyISOCode)
        //货币形式 -- 本地化
        let numberCurrencyPluralStyleStr = NumberFormatter.localizedString(from: number, number: .currencyPlural)
        //会计计数 -- 本地化
        let numberCurrencyAccountingStyleStr = NumberFormatter.localizedString(from: number, number: .currencyAccounting)
        
        print("numberNoneStyleStr = \(numberNoneStyleStr)")
        print("numberDecimalStyleStr = \(numberDecimalStyleStr)")
        print("numberCurrencyStyleStr = \(numberCurrencyStyleStr)")
        print("numberPercentStyleStr = \(numberPercentStyleStr)")
        print("numberScientificStyleStr = \(numberScientificStyleStr)")
        print("numberSpellOutStyleStr = \(numberSpellOutStyleStr)")
        print("numberOrdinalStyleStr = \(numberOrdinalStyleStr)")
        print("numberCurrencyISOStyleStr = \(numberCurrencyISOStyleStr)")
        print("numberCurrencyPluralStyleStr = \(numberCurrencyPluralStyleStr)")
        print("numberCurrencyAccountingStyleStr = \(numberCurrencyAccountingStyleStr)")

       /*
         打印结果:
         numberNoneStyleStr = 1235
         numberDecimalStyleStr = 1,234.568
         numberCurrencyStyleStr = $1,234.57
         numberPercentStyleStr = 123,457%
         numberScientificStyleStr = 1.2345678E3
         numberSpellOutStyleStr = one thousand two hundred thirty-four point five six seven eight
         numberOrdinalStyleStr = 1,235th
         numberCurrencyISOStyleStr = USD1,234.57
         numberCurrencyPluralStyleStr = 1,234.57 US dollars
         numberCurrencyAccountingStyleStr = $1,234.57
         */

    }
2:定制NumberFormatter,设置相应的属性

  func settingNumberFormatter() {
         let number = NSNumber(value: 10000.3456)
        let numberFormatter = NumberFormatter()
        //设置number显示样式
        numberFormatter.numberStyle = .decimal
        //设置填充位置
        numberFormatter.paddingPosition = .afterSuffix
        //设置填充符
        numberFormatter.paddingCharacter = "?"
        //设置格式宽度 数据宽度为15 包括前后缀在内的宽度
        numberFormatter.formatWidth = 15
        //设置位置后缀值
        numberFormatter.positiveSuffix = "元"
        //设置最大整数位数
        numberFormatter.maximumIntegerDigits = 6
        //设置最小整数位数
        numberFormatter.minimumIntegerDigits = 1
        print(numberFormatter.string(from: number)!) //10,000.346元????
    }
 3:设置群组格式化

   func formattingGroup() {
        let number = NSNumber(value: 1234567890098765)
        let numberFormatter = NumberFormatter()
        //设置用组分隔
        numberFormatter.usesGroupingSeparator = true
        //四个一组
        numberFormatter.groupingSize = 4
        //组间用空格隔开
        numberFormatter.groupingSeparator = " "
        //设置缩放倍数
        numberFormatter.multiplier = 2
        let string = numberFormatter.string(from: number)
        //2469 1357 8019 7530
        print(string!)
        
        //设置千分符号
        numberFormatter.groupingSeparator = ","
        numberFormatter.groupingSize = 3
        let str = numberFormatter.string(from: number)
        print(str!) //2,469,135,780,197,530
    }
 4:设置分数位

    func formattingtPercentage(){
        let percentFormatter = NumberFormatter()
        percentFormatter.numberStyle = NumberFormatter.Style.percent
        percentFormatter.multiplier = 1
        //设置最小小数点后的位数
        percentFormatter.minimumFractionDigits = 1
        //设置最大小数点后的位数
        percentFormatter.maximumFractionDigits = 2
        
        let myDouble1: Double = 8
        let myString1 = percentFormatter.string(for: myDouble1)
        //let myString1 = percentFormatter.string(from: NSNumber(value: myDouble1)) // also works
        print(String(reflecting: myString1)) // Optional("8.0%")
        
        let myDouble2 = 8.5
        let myString2 = percentFormatter.string(for: myDouble2)
        print(String(reflecting: myString2)) // Optional("8.5%")
        
        let myDouble3 = 8.5786
        let myString3 = percentFormatter.string(for: myDouble3)
        print(String(reflecting: myString3)) // Optional("8.58%")
       
    }
5:在$与数字之间加入空格
 func addSpace(){
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        formatter.paddingPosition = .afterPrefix
        formatter.paddingCharacter = " "
        formatter.formatWidth = 7
        print(formatter.string(from: 99.99)!)// prints "$ 99.99"
    }
6:设置格式化字符串

func formattingNumberUsingFormatString() {
        let numberFormatter = NumberFormatter()
        numberFormatter.positiveFormat = "###,##0.000"
        let formatterNumberString = numberFormatter.string(from: NSNumber(value: 122344.4563))
        print(formatterNumberString!)//122,344.456
    }


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值