2017-01-26 15 views
-1

문자열이 두 개로 변환되어야하는 "$4,102.33"입니다. 이것은 항상 미국이 될 것입니다. 내 유일한 방법은 $,을 제거하고 이중으로 변환하는 해킹입니다. NSFormatter처럼 보일뿐, 통화가 아닌 통화로 변환 할 수 있습니다. $,을 제거하는 것보다 더 좋은 방법이 있습니까? 그것을 double로 변환하기 전에?Swift 변환 통화 문자열을 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 메서드 만 보았습니다. .number 메서드가 있다는 것을 깨닫지 못했습니다. :-( – 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) 

은 (preferred) 더블 또는 소수로 전화 번호를 얻을 수 있습니다 후 직접 :

let doubleValue = number?.doubleValue 
let decimalValue = number?.decimalValue