我有一个字符串,我正在尝试将其转换为小数,我可以这样做。
这是转换为1.50的字符串,我通过下面的函数运行它,我得到正确的十进制数。但有时候这个字符串可能看起来像1.50美元,在这种情况下,传递给第一个函数失败了。如果我将它传递给第二个有效的函数,但我需要能够确定如何确定字符串是否有货币符号。那个或者可能将我们认为的两个功能组合成一个。
func decimalFormat(stringNumber:String) -> Decimal{
print("\(stringNumber) is the number being passed")
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let number = numberFormatter.number(from: stringNumber)
print("\(number!) is the number")
let amount = number?.decimalValue
return amount!
}
问题是有时字符串有一个货币符号,我想检查本地符号是什么,然后使用这样的东西来转换它
func curencyToDecimal(stringNumber:String) -> Decimal{
print("\(stringNumber) is the number being passed")
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
let number = numberFormatter.number(from: stringNumber)
print("\(number!) is the number")
let amount = number?.decimalValue
return amount!
}
在尝试转换符号之前,我只是不确定如何检查符号。
答案 0 :(得分:2)
您不需要手动检查货币符号。如果转换失败,您只需将numberFormatter.numberStyle
更改为.currency
即可。我还建议让函数返回一个可选项,因为某些输入值的转换可能会失败。
func decimalFormat(stringNumber:String) -> Decimal?{
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
if let number = numberFormatter.number(from: stringNumber) {
return number.decimalValue
}
numberFormatter.numberStyle = .currency
if let number = numberFormatter.number(from: stringNumber) {
return number.decimalValue
}
return nil
}
该函数使用区域设置en_US
decimalFormat(stringNumber: "123.45") //123.45
decimalFormat(stringNumber: "$123.45") //123.45