Swift5.1-NumberFormatter强大的格式化数字函数--把数字变成我们想要的格式(iOS,MacOS等通用)

4,114 阅读2分钟

现实开发中经常会遇到把数字转化为我们想要的数字格式,再转化为字符串的这种需求。

使用NumberFormatter可以一步到位。

(当然他也有把字串转化为数字的功能,这里不赘述)

 

基本用法(目前有10种):

因为数字有整数啊小数啊等等,所以在正式操作之前,需要统一把他们搞成NSNumber类型

import UIKit

let num = NSNumber(value: 1234.5678)

然后利用 NumberFormatter的静态方法⬇️⬇️⬇️

class func localizedString(from: NSNumber, number: NumberFormatter.Style) -> String

开始转换:

//根据使用者手机设定的地区不同而显示不同的格式,以下是在中国手机上的输出
//参考:https://developer.apple.com/documentation/foundation/numberformatter/style


NumberFormatter.localizedString(from: num, number: .none)//四舍五入的整数 "1235"

//保留三位小数,第四位小数四舍五入
NumberFormatter.localizedString(from: num, number: .decimal)//小数 "1,234.568"
NumberFormatter.localizedString(from: num, number: .percent)//百分数 "123,457%"

NumberFormatter.localizedString(from: num, number: .scientific)//科学计数 "1.2345678E3"
NumberFormatter.localizedString(from: num, number: .spellOut)//朗读形式 "one thousand two hundred thirty-four point five six seven eight"
NumberFormatter.localizedString(from: num, number: .ordinal)//序数形式 "1,235th"

//货币形式-保留2位小数,第三位小数四舍五入
NumberFormatter.localizedString(from: num, number: .currency)//"¥1,234.57"
NumberFormatter.localizedString(from: num, number: .currencyAccounting)//会计计数 "¥1,234.57"
NumberFormatter.localizedString(from: num, number: .currencyISOCode)//"CNY1,234.57"
NumberFormatter.localizedString(from: num, number: .currencyPlural)//"1,234.57 Chinese yuan"

通用用法:

import UIKit

let num = NSNumber(value: 1234.5678)

//创建NumberFormatter对象
let numberFormatter = NumberFormatter()

1.本地化(优化上面的朗读,序数,货币用法)

numberFormatter.locale = Locale(identifier: "zh_Hans_CN")//各语言都有对应的identifier

优化朗读用法:

numberFormatter.numberStyle = .spellOut
numberFormatter.string(from: num)//"一千二百三十四点五六七八"

优化序数用法:

numberFormatter.numberStyle = .ordinal
numberFormatter.string(from: num)//"第1,235"

优化货币用法:

numberFormatter.numberStyle = .currencyPlural
numberFormatter.string(from: num)//"1,234.57人民币"

2.分隔符,分隔位数(金融app用的多)

numberFormatter.numberStyle = .decimal  // 最终要出来小数

numberFormatter.usesGroupingSeparator = true //分隔设true
numberFormatter.groupingSeparator = "," //分隔符
numberFormatter.groupingSize = 3  //分隔位数

numberFormatter.string(from: num)//"1,234.568"

3.不足位用0填充

numberFormatter.numberStyle = .none //最终要出来整数

numberFormatter.formatWidth = 8 //补齐8位
numberFormatter.paddingCharacter = "0" //不足位用0补
numberFormatter.paddingPosition = .beforePrefix  //补前面

numberFormatter.string(from: num)//"00001235"

4.最大最小整数位数

numberFormatter.numberStyle = .none //最终要出来整数,默认设定可不写
numberFormatter.maximumIntegerDigits = 3 //设置最大整数位数(超过的直接截断)
numberFormatter.string(from: num)//"235"
numberFormatter.minimumIntegerDigits = 6 //设置最小整数位数(不足的前面补0)
numberFormatter.string(from: num)//"001235"

5.最大最小小数位数(numberStyle也不用指定为.decimal了)

numberFormatter.maximumFractionDigits = 3 //保留小数点后面的3位
numberFormatter.string(from: num)//"1234.568"
numberFormatter.minimumFractionDigits = 6 //小数点后至少6位(不足补0)
numberFormatter.string(from: num)//"1234.567800"

6.加前缀后缀

numberFormatter.positivePrefix = "共" 
numberFormatter.positiveSuffix = "元" 

numberFormatter.string(from: num)//"共1235元"

7.更灵活的格式化

numberFormatter.positiveFormat = "####.##元"
numberFormatter.string(from: num)//"1234.57元"

当然NumberFormatter还有很多别的用法,上面只是平常用的比较多的几种,如果看完上面的这些还不能满足开发需求的话,可以参考一下文档。

文档都有分类,可以根据类似上面的功能快速定位到哪一类:

官方文档:developer.apple.com/documentati…

 

广告时间:

大家如果正好想学iOS开发的话,可以来看看小弟的iOS视频教程,有更新有售后有辅导: m.cctalk.com/inst/s9vfhe…