Ios 在转换字符串之前,请检查该字符串是否具有货币符号

Ios 在转换字符串之前,请检查该字符串是否具有货币符号,ios,swift,Ios,Swift,我有一个字符串,我正试图转换成十进制,我可以这样做 这是转换1.50的字符串,我通过下面的函数运行它,得到正确的十进制数。但有时该字符串可能看起来像$1.50,在这种情况下,传递到第一个函数失败。如果我将其传递给第二个可以工作的函数,但我需要能够确定如何确定字符串是否有货币符号。或者像我认为的那样,将两个功能合并为一个 func decimalFormat(stringNumber:String) -> Decimal{ print("\(stringNumber) is the

我有一个字符串,我正试图转换成十进制,我可以这样做

这是转换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!
}

在尝试转换之前,我不确定如何检查符号。

您不需要手动检查货币符号。如果转换失败,您只需将
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
}
该函数使用Locale
en_US
为以下输入值提供正确的输出

decimalFormat(stringNumber: "123.45") //123.45
decimalFormat(stringNumber: "$123.45") //123.45

您不需要手动检查货币符号。如果转换失败,您只需将
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
}
该函数使用Locale
en_US
为以下输入值提供正确的输出

decimalFormat(stringNumber: "123.45") //123.45
decimalFormat(stringNumber: "$123.45") //123.45

你可以用正则表达式?两个都试试怎么样?如果使用
.decimal
转换失败(返回nil),请尝试使用
.currency
进行转换。请不要添加不相关的标记。[curry currency converter]是关于某个jQuery插件的。icekomo,你能提供一些示例和预期结果吗?@Raymond,我添加了一个字符串示例,我将传递给函数。你可能会使用正则表达式。两个都试试怎么样?如果使用
.decimal
转换失败(返回nil),请尝试使用
.currency
进行转换。请不要添加不相关的标记。[curry currency converter]是关于jQuery插件的。icekomo,你能提供一些示例和预期结果吗?@Raymond,我添加了一个字符串示例,我将传递给函数。