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

时间:2017-07-14 11:22:35

标签: swift nsnumberformatter

我有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中{千位分隔符(逗号,句号或任何其他货币可能使用的任何字符)的要求,但不允许不合理的转换?

非常感谢提前。

3 个答案:

答案 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应格式正确