首发于iOS
Swift5.1-NumberFormatter强大的格式化数字函数(iOS,MacOS等通用)

Swift5.1-NumberFormatter强大的格式化数字函数(iOS,MacOS等通用)

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

使用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/doc


广告时间:

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

编辑于 2019-08-12 22:03