现实开发中经常会遇到把数字
转化为我们想要的数字格式
,再转化为字符串
的这种需求。
使用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…