在转换之前检查String是否有货币符号

时间:2017-09-13 13:59:41

标签: ios swift

我有一个字符串,我正在尝试将其转换为小数,我可以这样做。

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

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

1 个答案:

答案 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