2017-09-13 69 views
0

我有一个字符串,我试图将其转换为我可以做的小数。转换之前检查字符串是否有货币符号

这里是要转换为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

尝试两种方法怎么样?如果使用'.decimal'进行转换失败(返回nil),则尝试使用'.currency'进行转换。 –

+2

请不要添加无关标签。 [curry-currency-converter]是关于一些jQuery插件。 –

回答

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