2017-09-13 6 views
0

私ができる小数点に変換しようとしている文字列があります。文字列に変換前の通貨記号があるかどうか確認してください

ここでは1.50を変換する文字列がありますが、私はそれを以下の関数で実行して正しい10進数を返します。しかし、その文字列が$ 1.50のように見えることもあります。その場合、最初の関数に渡すと失敗します。動作する2番目の関数に渡しても、文字列に通貨記号があるかどうかを判断する方法を理解できる必要があります。私は思ったようにそれを組み合わせたり、両方の機能を1つに組み合わせたりすることを提案しました。

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に変更するだけです。私はまた、変換がいくつかの入力値で失敗する可能性があるので、関数をオプションに戻すようにアドバイスします。

この関数は、Locale en_USを使用して、以下の入力値に対して正しい出力を提供します。

decimalFormat(stringNumber: "123.45") //123.45 
decimalFormat(stringNumber: "$123.45") //123.45 
関連する問題