利用 NumberFormatter 顯示 Money

The Beatles 唱過,money can’t buy me love,跟 love 比起來,money 真的不算什麼。不過為了活下去,我們還是需要錢,所以接下來就讓我們學學如何在 Swift 裡將數字變成金錢格式的字串吧。

利用 NumberFormatter 將數字變成金錢格式。

import Foundation

let money = 1234
let formatter = NumberFormatter()
formatter.numberStyle = .currency
var moneyString = formatter.string(from: NSNumber(value: money))

說明

let formatter = NumberFormatter()

NumberFormatter 可以幫我們將數字變成特定的字串格式。

formatter.numberStyle = .currency

將 numberStyle 設為 .currency 可顯示金錢格式,讓字串包含金錢符號和逗號。numberStyle 的型別是 enum 定義的 Style,定義了許多 case,可將數字表示成不同的格式。

var moneyString = formatter.string(from: NSNumber(value: money))

將數字以指定的格式轉成字串,由於 string(from:) 的參數 from 型別是 NSNumber,所以我們須以 NSNumber(value: money) 將 Int 型別的 money 變成 NSNumber。

currencyPlural 格式。

顯示金錢代碼的全名,比方美金是 US dollars。

formatter.numberStyle = .currencyPlural
moneyString = formatter.string(from: NSNumber(value: money))

currencyISOCode 格式。

顯示金錢代碼的縮寫,比方美金是 USD。

formatter.numberStyle = .currencyISOCode
moneyString = formatter.string(from: NSNumber(value: money))

小數點後最多顯示幾位。

maximumFractionDigits 代表小數點後最多顯示幾位。設為 0 時表示金錢為整數,沒有小數點。

formatter.maximumFractionDigits = 0
formatter.numberStyle = .currency
moneyString = formatter.string(from: NSNumber(value: money))

指定特定國家的金錢符號。

不同的國家有不同的金錢符號,比方美金是 $,日元是 ¥。NumberFormatter 的 locale 決定格式對應的國家,因此Locale(identifier: "ja_JP") 變顯示可愛結衣生活必需的日元格式。

formatter.locale = Locale(identifier: "ja_JP")
moneyString = formatter.string(from: NSNumber(value: money))

新台幣格式。

formatter.locale = Locale(identifier: "zh_TW")
formatter.numberStyle = .currencyISOCode
moneyString = formatter.string(from: NSNumber(value: money))
formatter.locale = Locale(identifier: "zh_TW")
formatter.numberStyle = .currencyPlural
moneyString = formatter.string(from: NSNumber(value: money))

大部分的時候我們其實不用特別設定 locale,因為 iOS App 執行時,locale 會自動參考使用者手機的設定,因此台灣的使用者看到的自動會是新台幣的格式。

各國的 locale 縮寫:

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com