一尘不染

在Swift中与NSNumberFormatter争夺货币

swift

我正在创建一个预算应用程序,允许用户输入他们的预算以及交易。我需要允许用户从单独的文本字段中输入便士和英镑,并且它们需要与货币符号一起设置格式。我目前可以正常使用,但希望将其本地化,因为目前仅适用于GBP。我一直在努力将NSNumberFormatter示例从Objective
C转移到Swift。

我的第一个问题是我需要为输入字段设置占位符以使其特定于用户位置。例如。磅,便士,美元和美分等…

第二个问题是,需要格式化每个文本字段(例如10216和32)中输入的值,并且需要添加特定于用户位置的货币符号。因此它将变成10,216.32英镑或10,216.32美元等…

另外,我需要在计算中使用格式化数字的结果。那么,如何在不遇到货币符号问题的情况下做到这一点呢?

任何帮助将非常感激。


阅读 248

收藏
2020-07-07

共1个答案

一尘不染

这是一个有关如何在Swift 3上使用它的示例。( 编辑 :在Swift 4中也可以使用)

let price = 123.436 as NSNumber

let formatter = NumberFormatter()
formatter.numberStyle = .currency
// formatter.locale = NSLocale.currentLocale() // This is the default
// In Swift 4, this ^ has been 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 €"
2020-07-07