1. ホーム
  2. swift

[解決済み] SwiftのNSNumberFormatterを使った通貨入力の書式設定

2023-04-24 09:48:09

質問

予算と取引を入力するアプリを作成しています。私は、ユーザーが別々のテキストフィールドからペンスとポンドの両方を入力できるようにする必要があり、それらは通貨記号と一緒にフォーマットされる必要があります。現在、この機能は正常に動作していますが、現在GBPでしか動作しないため、ローカライズしたいと考えています。私は、NSNumberFormatterの例をObjective-CからSwiftに変換するのに苦労しています。

私の最初の問題は、入力フィールドのプレースホルダーをユーザーの場所に固有のものに設定する必要があるという事実です。たとえば、ポンドとペンス、ドルとセントなどです。

2 つ目の問題は、10216 や 32 などの各テキストフィールドに入力された値をフォーマットし、ユーザーの所在地に固有の通貨記号を追加する必要があることです。つまり、£10,216.32 や $10,216.32 などとなるわけです。

また、フォーマットされた数値の結果を計算で使用する必要があります。通貨記号の問題に直面することなく、これを行うにはどうしたらよいでしょうか。

どのように解決するのですか?

Swift 3での使い方の例です。 ( 編集 : Swift 5でも動作します )

let price = 123.436 as NSNumber

let formatter = NumberFormatter()
formatter.numberStyle = .currency
// formatter.locale = NSLocale.currentLocale() // This is the default
// In Swift 4, this ^ was renamed to simply NSLocale.current
formatter.string(from: price) // "$123.44"

formatter.locale = Locale(identifier: "es_CL")
formatter.string(from: price) // $123"

formatter.locale = Locale(identifier: "es_ES")
formatter.string(from: price) // "123,44 €"


Swift 2での使い方の古い例です。

let price = 123.436

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
// formatter.locale = NSLocale.currentLocale() // This is the default
formatter.stringFromNumber(price) // "$123.44"

formatter.locale = NSLocale(localeIdentifier: "es_CL")
formatter.stringFromNumber(price) // $123"

formatter.locale = NSLocale(localeIdentifier: "es_ES")
formatter.stringFromNumber(price) // "123,44 €"