在Swift中与NSNumberFormatter争夺货币

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

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

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

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

任何帮助将非常感激。


噜噜哒
浏览 604回答 3
3回答

慕勒3428872

这是一个有关如何在Swift 3上使用它的示例。(编辑:在Swift 4中也可以使用)let price = 123.436 as NSNumberlet formatter = NumberFormatter()formatter.numberStyle = .currency// formatter.locale = NSLocale.currentLocale() // This is the default// In Swift 4, this ^ has been renamed to simply NSLocale.currentformatter.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.436let formatter = NSNumberFormatter()formatter.numberStyle = .CurrencyStyle// formatter.locale = NSLocale.currentLocale() // This is the defaultformatter.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 €"

慕莱坞森

如果您正在寻找一种可以为您提供解决方案的解决方案:“ 5” =“ $ 5”“ 5.0” =“ $ 5”“ 5.00” =“ $ 5”“ 5.5” =“ $ 5.50”“ 5.50” =“ $ 5.50”“ 5.55” =“ $ 5.55”“ 5.234234” =“ 5.23”请使用以下内容:func cleanDollars(_ value: String?) -> String {    guard value != nil else { return "$0.00" }    let doubleValue = Double(value!) ?? 0.0    let formatter = NumberFormatter()    formatter.currencyCode = "USD"    formatter.currencySymbol = "$"    formatter.minimumFractionDigits = (value!.contains(".00")) ? 0 : 2    formatter.maximumFractionDigits = 2    formatter.numberStyle = .currencyAccounting    return formatter.string(from: NSNumber(value: doubleValue)) ?? "$\(doubleValue)"}

繁星coding

我还实现了@NiñoScript提供的解决方案作为扩展:延期// Create a string with currency formatting based on the device locale//extension Float {    var asLocaleCurrency:String {        var formatter = NSNumberFormatter()        formatter.numberStyle = .CurrencyStyle        formatter.locale = NSLocale.currentLocale()        return formatter.stringFromNumber(self)!    }}用法:let amount = 100.07let amountString = amount.asLocaleCurrencyprint(amount.asLocaleCurrency())// prints: "$100.07"迅捷3    extension Float {    var asLocaleCurrency:String {        var formatter = NumberFormatter()        formatter.numberStyle = .currency        formatter.locale = Locale.current        return formatter.string(from: self)!    }}
打开App,查看更多内容
随时随地看视频慕课网APP