Swift-NumberFormatter的简单使用

来源:互联网 发布:欧式快热炉 油汀 知乎 编辑:程序博客网 时间:2024/06/16 13:54

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

1:NSNumberFormatter提供了两个非常便利的方法
open func string(from number: NSNumber) -> String? 根据NSNumber得到Stringopen 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    }


0 0