Swift - 使用NumberFormatter进行数字格式化显示(附样例)
我之前写过一篇文章介绍如何使用 String format 将数字转成字符串:
但 String format 毕竟功能有限,如果需要做一些更复杂的格式化效果,比如:添加分隔符、使用科学计数表示、转成货币形式等等,可以借助 NumberFormatter 类来实现。下面通过样例进行演示。
一、基本用法
1,将数字转成字符串
(1)最简单的便是使用 NumberFormatter 的 localizedString 方法进行数字格式化:
- from 属性为需要格式化的数字(必须为 NSNumber 类型)
- number 属性可以设置相应的显示样式。
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //原始数字(需要先转成NSNumber类型) let number = NSNumber(value: 1234.5678) //四舍五入的整数 let none = NumberFormatter.localizedString(from: number, number: .none) //小数形式(以国际化格式输出 保留三位小数,第四位小数四舍五入) let decimal = NumberFormatter.localizedString(from: number, number: .decimal) //百分数形式 let percent = NumberFormatter.localizedString(from: number, number: .percent) //科学计数 let scientific = NumberFormatter.localizedString(from: number, number: .scientific) //朗读形式(英文表示) let spellOut = NumberFormatter.localizedString(from: number, number: .spellOut) //序数形式 let ordinal = NumberFormatter.localizedString(from: number, number: .ordinal) //货币形式(以货币通用格式输出 保留2位小数,第三位小数四舍五入,在前面添加货币符号) let currency = NumberFormatter.localizedString(from: number, number: .currency) //货币形式 let currencyISOCode = NumberFormatter.localizedString(from: number, number: .currencyISOCode) //货币形式 let currencyPlural = NumberFormatter.localizedString(from: number, number: .currencyPlural) //会计计数 let currencyAccounting = NumberFormatter.localizedString(from: number, number: .currencyAccounting) //打印结果 print("原始值 = \(number)") print("none = \(none)") print("decimal = \(decimal)") print("percent = \(percent)") print("scientific = \(scientific)") print("spellOut = \(spellOut)") print("ordinal = \(ordinal)") print("currency = \(currency)") print("currencyISOCode = \(currencyISOCode)") print("currencyPlural = \(currencyPlural)") print("currencyAccounting = \(currencyAccounting)") } }
(2)运行结果如下:
2,将字符串转为数字
(1)NumberFormatter 除了可以将数字转成字符串,还可以将字符串转为数字。
(2)运行结果如下:
//从字符串装成数字 let number = NumberFormatter().number(from: "1234.5678")! //四舍五入的整数 let none = NumberFormatter.localizedString(from: number, number: .none) //小数形式(以国际化格式输出 保留三位小数,第四位小数四舍五入) let decimal = NumberFormatter.localizedString(from: number, number: .decimal) //打印结果 print("原始值 = \(number)") print("none = \(none)") print("decimal = \(decimal)")
(2)运行结果如下:
二、进阶用法
除了使用 NumberFormatter 的 localizedString 方法提供的几种格式化方式外。我们也可以设置 NumberFormatter 对象的相应属性,来实现定制。
1,修改分割符、分割位数
//原始值 let number = NSNumber(value: 12345.6789) //创建一个NumberFormatter对象 let numberFormatter = NumberFormatter() //设置number显示样式 numberFormatter.numberStyle = .decimal // 小数形式 numberFormatter.usesGroupingSeparator = true //设置用组分隔 numberFormatter.groupingSeparator = "," //分隔符号 numberFormatter.groupingSize = 4 //分隔位数 //格式化 let format = numberFormatter.string(from: number)! //打印结果 print("原始值 = \(number)") print("格式化结果 = \(format)")
2,设置格式宽度、填充符、填充位置
//原始值 let number = NSNumber(value: 12345.6789) //创建一个NumberFormatter对象 let numberFormatter = NumberFormatter() //设置number显示样式 numberFormatter.numberStyle = .none //四舍五入的整数 numberFormatter.formatWidth = 10 //补齐10位 numberFormatter.paddingCharacter = "0" //不足位数用0补 numberFormatter.paddingPosition = .beforePrefix //补在前面 //格式化 let format = numberFormatter.string(from: number)! //打印结果 print("原始值 = \(number)") print("格式化结果 = \(format)")
3,设置最大整数位数、最小整数位数
//原始值 let number = NSNumber(value: 5.6789) //创建一个NumberFormatter对象 let numberFormatter = NumberFormatter() //设置number显示样式 numberFormatter.numberStyle = .none //四舍五入的整数 numberFormatter.maximumIntegerDigits = 4 //设置最大整数位数(超过的直接截断) numberFormatter.minimumIntegerDigits = 3 //设置最小整数位数(不足的前面补0) //格式化 let format = numberFormatter.string(from: number)! //打印结果 print("原始值 = \(number)") print("格式化结果 = \(format)")
4,设置最大小数位数、最小小数位数
//原始值 let number = NSNumber(value: 12345.6) //创建一个NumberFormatter对象 let numberFormatter = NumberFormatter() numberFormatter.maximumFractionDigits = 3 //设置小数点后最多3位 numberFormatter.minimumFractionDigits = 2 //设置小数点后最少2位(不足补0) //格式化 let format = numberFormatter.string(from: number)! //打印结果 print("原始值 = \(number)") print("格式化结果 = \(format)")
5,设置前缀、后缀
//原始值 let number = NSNumber(value: 12345.6789) //创建一个NumberFormatter对象 let numberFormatter = NumberFormatter() //设置number显示样式 numberFormatter.numberStyle = .none //四舍五入的整数 numberFormatter.positivePrefix = "$" //自定义前缀 numberFormatter.positiveSuffix = "元" //自定义后缀 //格式化 let format = numberFormatter.string(from: number)! //打印结果 print("原始值 = \(number)") print("格式化结果 = \(format)")
6,设置格式化字符串
//原始值 let number = NSNumber(value: -12345.6789) //创建一个NumberFormatter对象 let numberFormatter = NumberFormatter() numberFormatter.positiveFormat = "###,###.##" //设置格式 //格式化 let format = numberFormatter.string(from: number)! //打印结果 print("原始值 = \(number)") print("格式化结果 = \(format)")