2017-09-13 71 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