Swift 的 NumberFormatter(1)

Henry Huang
4 min readOct 28, 2019

--

之前有紀錄過在iOS的貨幣表示方式的寫法,是使用NumberFormatter 就可以輕鬆地達成,而NumberFormatter的功能其實也非常多,所以這次再來記錄一下其中三種也可能常用的功能

ㄧ. 數字的分組

//先創建一個NSNumber及NumberFormatter
let nsNumber = NSNumber(value: 236428.45)
let formatter = NumberFormatter()
//將格式設定為小數點保留3位第4位四捨五入
formatter.numberStyle = .decimal
let number = formatter.string(from: nsNumber)
print(number!) //印出 236,428.45

也能關閉分組(預設就是開啟)

//關閉數字的分組
formatter.usesGroupingSeparator = false
let number = formatter.string(from: nsNumber)
print(number!) //印出236428.45

也能客製分隔的符號以及位數(記得usesGroupingSeparator不要設定為false)

//分隔的符號
formatter.groupingSeparator = "-"
//分隔的位數
formatter.groupingSize = 2
let number = formatter.string(from: nsNumber)
print(number!) //印出 23-64-28.45

二.數字四捨五入取整數和補齊位數

let nsNumber = NSNumber(value: 236428.45)
let formatter = NumberFormatter()
//四捨五入取整數
formatter.numberStyle = .none
let number = formatter.string(from: nsNumber)
print(number!) //印出 236428

將小數點換成.54,會將小數點四捨五入

let nsNumber = NSNumber(value: 236428.54)
let formatter = NumberFormatter()
//四捨五入取整數
formatter.numberStyle = .none
let number = formatter.string(from: nsNumber)
print(number!) //印出236429

如果有特定位數可以使用不足補齊功能

let nsNumber = NSNumber(value: 236428.54)
let formatter = NumberFormatter()
//四捨五入取整數
formatter.numberStyle = .none
//補到12位數
formatter.formatWidth = 12
//不足用0補
formatter.paddingCharacter = "0"
let number = formatter.string(from: nsNumber)
print(number!) //印出 000000236429 預設好像補在前面

位數不足也可以補在後面

//補齊位數的位置
formatter.paddingPosition = .afterSuffix
let number = formatter.string(from: nsNumber)
print(number!) //印出 236429000000

三.前綴後綴字

let nsNumber = NSNumber(value: 236428.54)
let formatter = NumberFormatter()
//四捨五入取整數
formatter.numberStyle = .none
//加入前綴字
formatter.positivePrefix = "新台幣 "
//加入後綴字
formatter.positiveSuffix = " 元"
let number = formatter.string(from: nsNumber)
print(number!) //印出 新台幣 236429 元

--

--

Henry Huang
Henry Huang

Written by Henry Huang

大學讀企管/退伍後在業務圈打滾6年後突然有一天決定投入完全沒接觸過的程式設計/目前為一位iOS Developer/熱愛NBA/dafu1231@gmail.com

No responses yet