为了账号安全,请及时绑定邮箱和手机立即绑定

在Swift中与NSNumberFormatter争夺货币

在Swift中与NSNumberFormatter争夺货币

噜噜哒 2019-11-12 14:48:47
我正在创建一个预算应用程序,允许用户输入他们的预算以及交易。我需要允许用户从单独的文本字段中输入便士和英镑,并且它们需要与货币符号一起设置格式。我目前可以正常使用,但希望将其本地化,因为目前仅适用于GBP。我一直在努力地将NSNumberFormatter示例从Objective C转移到Swift。我的第一个问题是我需要为输入字段设置占位符,使其特定于用户位置。例如。磅,便士,美元和美分等...第二个问题是,需要格式化在每个文本字段(例如10216和32)中输入的值,并且需要添加特定于用户位置的货币符号。因此它将变成10,216.32英镑或10,216.32美元,等等。另外,我需要在计算中使用格式化数字的结果。那么,如何在不遇到货币符号问题的情况下做到这一点呢?任何帮助将非常感激。
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这是一个有关如何在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 €"


查看完整回答
反对 回复 2019-11-12
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

如果您正在寻找一种可以为您提供解决方案的解决方案:


“ 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)"

}


查看完整回答
反对 回复 2019-11-12
?
繁星coding

TA贡献1797条经验 获得超4个赞

我还实现了@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.07

let amountString = amount.asLocaleCurrency

print(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)!

    }

}


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 602 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信