2017-01-26 13 views
-1

私は文字列、"$4,102.33"をdoubleに変換する必要があります。これは常に米国です。私の唯一の方法は、$,を取り除き、次にdoubleに変換するハックです。 NSFormatterのように私は通貨に変換することができますし、それからはできません。 $,を削除するだけではなく、組み込み関数か、より良い方法がありますか?それを二重に変換する前に?スウィフト変換通貨文字列をdoubleにする

ありがとうございました。

+0

サイドノート、通貨に 'Double'を使わないでください:http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency – Alexander

+0

' NSNumberFormatter'は簡単にその文字列を変換します麻痺するあなたが正しく設定していればあなたの質問に 'NSNumberFormatter'の使用を表示してください。 – rmaddy

+0

Argh - 私は.stringメソッドしか見ていませんでした。 .nu​​mberメソッドがあることを認識していませんでした。 :-( – user441058

答えて

6

NumberFormatterは、文字列に変換できます。また、Doubleは、それが2を基準にしているため、正確な数値を表すことができません。Decimalを使用すると、速度は遅くなりますが安全です。指定した通貨の文字列からのNSNumberに変換するには

let str = "$4,102.33" 

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 

if let number = formatter.number(from: str) { 
    let amount = number.decimalValue 
    print(amount) 
} 
+1

注 - 文字列が常にUSDとしてフォーマットされている場合は、フォーマッタのロケールを 'en_US'に設定する必要があります。そうしないと、他のほとんどのロケールでは文字列が正しく解析されません。 – rmaddy

+0

@maddy良いキャッチ – muescha

0

簡単です:

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
formatter.locale = Locale(identifier: "en_US") 
let number = formatter.number(from: string) 

ダブルとして、またはDECIMAL(preferred)は、その後、直接であるとして、あなたの番号を取得するには、次の

let doubleValue = number?.doubleValue 
let decimalValue = number?.decimalValue 
関連する問題