NumberFormatter 看名字就知道是數字格式化,NumberFormatter实例用于格式化文本进行单元化显示。
1:NSNumberFormatter提供了两个非常便利的方法
2:如果想创建一个本地字符串来表示NSNumber值,不需要创建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
}