如何将货币字符串转换为忽略分隔符的数字?

How can I convert a currency string to a number ignoring separators?

我有一个 NumberFormatter(称为 currencyFormatter),它被配置为使用以下方法将 String,例如“£1,000”转换为 NSDecimalNumber 1000代码:

// Configuration
let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
currencyFormatter.currencyCode = "GBP"

// Usage
currencyFormatter.number(from: "£1,000")

如果我从字符串中省略逗号,转换仍然有效,但如果逗号放错位置(例如“£10,00”),该方法将失败,返回 nil。

虽然我可以删除所有逗号,但这会导致在使用逗号作为小数点分隔符并使用句点代替逗号的语言环境中出现问题。

有没有一种安全的方法可以稍微放宽 NumberFormatter 中千位分隔符(逗号、句点或任何其他货币可能使用的任何字符)放置的要求,但不允许不合理的转换?

非常感谢。

如果您的意图是对分组的展示位置宽大一些 分隔符(可以是逗号或句点,具体取决于语言环境) 那么你可以删除格式化程序 currencyGroupingSeparator 来自输入字符串而不是硬编码逗号:

var input = "£10,00"
if let sep = currencyFormatter.currencyGroupingSeparator {
    input = input.replacingOccurrences(of: sep, with: "")
}

您可以将 currencyGroupingSeparator 替换为 "" 而不是 static

    let currencyFormatter = NumberFormatter()
    currencyFormatter.numberStyle = .currency
    currencyFormatter.currencySymbol = "£"

    print("number == \(currencyFormatter.number(from: "£10.00,56".replacingOccurrences(of: currencyFormatter.currencyGroupingSeparator, with: "")))")
   //it will print as 1000.56