返回 导航

Swift

hangge.com

Swift - 使用NumberFormatter进行数字格式化显示(附样例)

作者:hangge | 2018-07-16 08:10
我之前写过一篇文章介绍如何使用 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 除了可以将数字转成字符串,还可以将字符串转为数字。
//从字符串装成数字
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)")
评论

全部评论(0)

回到顶部