剥离货币字符字符串的优雅方式?
Elegant way of stripping string of currency characters?
目前我从包含货币字符的服务接收字符串(例如“$123.44”、“123,44 €”)。我想去掉这些货币字符的字符串,以便对这些价格进行一些计算(加钱、减钱……等)。
我知道我可以替换某些字符的出现,然后在计算后重新添加它们,但我觉得可能有更好的解决方案。
有什么想法吗?
您可以使用 NSNumberFormatter
将格式化价格转换为 Double
值
func getNumber(formattedPrice: String, localeID: String) -> Double? {
let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.locale = NSLocale(localeIdentifier: localeID)
return formatter.numberFromString(formattedPrice)?.doubleValue
}
但您需要指定 locale
getNumber("3.44", localeID: "en_US") // 123.44
getNumber("123,44€", localeID: "it_IT") // 123.44
getNumber("£123.44", localeID: "en_UK") // 123.44
您可以使用 NSCharacterSet
根除这些字符,如下所示:
var dollarStr = ".50"
var yuanStr = "¥18.25"
var euroStr = "20.75 €"
let strArray = [dollarStr, yuanStr, euroStr]
let charSet = NSCharacterSet(charactersInString: "$¥€ ")
for str in strArray {
let trimmedStr = str.stringByTrimmingCharactersInSet(charSet)
print(trimmedStr)
}
打印出来:
1.50
18.25
20.75
目前我从包含货币字符的服务接收字符串(例如“$123.44”、“123,44 €”)。我想去掉这些货币字符的字符串,以便对这些价格进行一些计算(加钱、减钱……等)。
我知道我可以替换某些字符的出现,然后在计算后重新添加它们,但我觉得可能有更好的解决方案。
有什么想法吗?
您可以使用 NSNumberFormatter
将格式化价格转换为 Double
值
func getNumber(formattedPrice: String, localeID: String) -> Double? {
let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.locale = NSLocale(localeIdentifier: localeID)
return formatter.numberFromString(formattedPrice)?.doubleValue
}
但您需要指定 locale
getNumber("3.44", localeID: "en_US") // 123.44
getNumber("123,44€", localeID: "it_IT") // 123.44
getNumber("£123.44", localeID: "en_UK") // 123.44
您可以使用 NSCharacterSet
根除这些字符,如下所示:
var dollarStr = ".50"
var yuanStr = "¥18.25"
var euroStr = "20.75 €"
let strArray = [dollarStr, yuanStr, euroStr]
let charSet = NSCharacterSet(charactersInString: "$¥€ ")
for str in strArray {
let trimmedStr = str.stringByTrimmingCharactersInSet(charSet)
print(trimmedStr)
}
打印出来:
1.50
18.25
20.75