我有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
中{千位分隔符(逗号,句号或任何其他货币可能使用的任何字符)的要求,但不允许不合理的转换?
非常感谢提前。
答案 0 :(得分:3)
如果您打算对分组的展示位置放宽
分隔符(可以是逗号或句点,具体取决于区域设置)
然后你可以删除格式化程序currencyGroupingSeparator
从输入字符串而不是硬编码的逗号:
var input = "£10,00"
if let sep = currencyFormatter.currencyGroupingSeparator {
input = input.replacingOccurrences(of: sep, with: "")
}
答案 1 :(得分:0)
您可以将currencyGroupingSeparator替换为“”而非静态
// v--- identity
0 1 2 3 4 5
1(2) 5(2) 9(2)
6(2) 9(/)
15(2)
// ^ ^--- unboxing times, `/` means doesn't reducing at this time
// |
// |--- the sum result of current reducing
答案 2 :(得分:-3)
首先忽略pound或任何符号,然后使用新字符串
创建类型字符串数组,如下所示var numbersArray = yourSignIgnoredString.components(separatedBy: ",")
var newString = ""
for i in 0...numbersArray.count - 1{
newString = "\(newString)\(numbersArray[i])"
}
newString应格式正确