Swift的貨幣表示(使用NumberFormatter)

Henry Huang
3 min readAug 25, 2019

--

最近公司的專案突然要將數字的顯示加上千分位的”,”號,所以也就順便記錄一下,因為好像很常用,可是又不常用…哈哈😂

在 Swift 裡面關於字串的顯示格式,基本上使用 NumberFormatter 這個類別完來幾乎就可以完成自己想要的顯示格式,而且使用起來真的都超級簡單,只要幾行就結束了。

假設要格式化的數字是以下

var myNumber = 7533967

再創建一個formate

let formate = NumberFormatter()

像我的需求是要顯示千分位”,”也就是貨幣的顯示方式

那就設定一下 formate 的 numberStyle,而且 Apple 已經為這個 numberStyle 建立了一個 enum,基本上看文字敘述就大概知道是什麼,只要選擇一下就好了,就不多介紹。

formate.numberStyle = .currency

最後使用這個 formate 來格式化,因為裡面要放 NSNumber 所以要使用 NSNumber 來轉型。

let myNFormate = formate.string(from: NSNumber(value: myNumber))

最後輸出來看看

print(myNFormate!) //$7,533,967.00

基本上就完成了…但是有小數點好像怪怪的,放心,Apple當然也沒那麼笨..只要設定要顯示小數點幾位就可以了

formate.numberStyle = .currency
formate.maximumFractionDigits = 0
let myNFormate = formate.string(from: NSNumber(value: myNumber))print(myNFormate!) //$7,533,967

再順便記錄一下其他的顯示會是怎樣

formate.numberStyle = .currencyPlural //7,533,967.00 US dollars
formate.numberStyle = .currencyISOCode //USD7,533,967.00.
formate.numberStyle = .currencyAccounting //$7,533,967.00

對了,此顯示格式會自動抓取使用者手機內的設定,所以台灣就會看到是新台幣格式,不用自己做設定,但是如果要自己做設定,只要設定 formate的 locoal 就可以囉,像以下

formate.numberStyle = .currencyISOCode
formate.locale = Locale(identifier: "zh_TW")
let myNFormate = formate.string(from: NSNumber(value: myNumber))
print(myNFormate!) //TWD7,533,967.00

這次就先記錄有關貨幣的顯示,其實 NumberFormatter 還有超多可以用,之後再來看看囉。

--

--

Henry Huang
Henry Huang

Written by Henry Huang

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

No responses yet