【问题标题】:Type NSDecimalNumber in swift 3 with sdk paypal使用 sdk paypal 在 swift 3 中输入 NSDecimalNumber
【发布时间】:2017-03-21 16:59:42
【问题描述】:

当我创建要发送到贝宝的项目时,我会执行以下操作

let ammountRequest: String = txtAmmount.text!
let item = PayPalItem(name: "shop things", withQuantity: 1, withPrice: NSDecimalNumber(string: ammountRequest), withCurrency: "EUR", withSku: "Create Balance")

let items = [item]
let subtotal = PayPalItem.totalPrice(forItems: items)

例如,如果“ammountRequest”等于 11.12,则在支付页面上将显示 11 而不是 11.12 我可以显示小数位,因为它们被删除了吗?

【问题讨论】:

    标签: ios swift paypal swift3


    【解决方案1】:

    您可能没有很好地处理本地化问题。 NSDecimalNumber(string: ammountRequest) 正在尝试使用当前语言环境解析字符串。因此,您必须确保字符串包含,(逗号)或.(点)作为小数点分隔符,具体取决于当前语言环境。

    documentation 中的讨论描述了取决于区域设置的可接受值。

    解决此问题的一种方法是将所有可能的小数分隔符(.,)替换为 .,然后使用英语语言环境(最好是 POSIX 语言环境):

    let amountString = "11.12"
    let normalizedAmountString = amountString.replacingOccurrences(of: "[,.]", with: ".", options: .regularExpression)
    
    let posixLocale = Locale(identifier: "en_US_POSIX")
    
    let amount = NSDecimalNumber(string: normalizedAmountString, locale: posixLocale)
    print(amount)
    

    请注意,大多数时候NSDecimalNumber 可以同时处理.,。当., 是当前语言环境中的分组分隔符时会出现问题。

    PS:您应该在 Swift 代码中使用 Decimal 而不是 NSDecimalNumber

    【讨论】:

    • 解决了我的问题。非常感谢
    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    相关资源
    最近更新 更多