2017-10-24 10 views
0

다음 코드를 사용하여 문자열을 미국 통화로 변환하고 있습니다. 그러나, 나는 라운드 업을 무력화하는 방법을 알아낼 수 없었다.문자열을 반올림하지 않고 통화로 변환하는 방법은 무엇입니까?

예를 들어, 문자열 값이 "0.000012"이면 코드가 "$ 0.00"으로 변환합니다.

방법은 제가 사용 :

내가 그것을 사용하고 확장이 그렇게 answer에서입니다

print(Formatter.currency.locale) // "en_US (current)\n" 
print(priceUsdInt.currency)   // "$1.99\n" 
+0

'0.000012'는 2 자리로 반올림되었습니다. '0.00'은 ... 실제로 귀하의 질문은 무엇입니까? – holex

+0

나는 그것을 둥글게하고 싶지 않다. "$ 0.00012" – sc13

+0

이되고 싶다면'usesSignificantDigits'와'minimumSignificantDigits' 속성에 중점을두고'NumberFormatter' [docs] (https://developer.apple.com/documentation/foundation/numberformatter)를 먼저 읽어보십시오. , 혹시...? – holex

답변

1

(이 경우 지점 이후 6 개 자리를 수락) 당신의 Formatter 확장

extension Formatter { 
    static let currency = NumberFormatter(style: .currency) 
    static let currencyUS: NumberFormatter = { 
     let formatter = NumberFormatter(style: .currency) 
     formatter.locale = Locale(identifier: "en_US") 
     formatter.maximumFractionDigits = 6; 
     return formatter 
    }() 
    static let currencyBR: NumberFormatter = { 
     let formatter = NumberFormatter(style: .currency) 
     formatter.locale = Locale(identifier: "pt_BR") 
     formatter.maximumFractionDigits = 6; 
     return formatter 
    }() 
} 
+0

그건 완벽하게 작동했습니다. 정말 고맙습니다! – sc13

+0

@ sc13you 여러분을 환영합니다. 대답 중 하나를 수락 – schmidt9

1

0.000012, 즉 잘못된 것 0.01로 변환 안됩니다이다. 라운딩을 제어하려면 다른 형식을 설정하려면 변경할 수있는 소수점

String(format: "%0.3f", string) 
+0

코드가 "0.01"이 아닌 "$ 0.00"으로 변환합니다. 가능한 경우 소수점을 기존 코드에 적용하고 싶습니다. 답장을 보내 주셔서 감사합니다! – sc13

1

사용에 formatter.maximumFractionDigits = 6;를 추가 최대 분수 부호. 아래의 예 :

let price = 0.000012 as NSNumber 
let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
formatter.maximumFractionDigits = 6 // set this to 6. it is 2 by default. 
formatter.string(from: price) // outputs: "$0.000012" 
+0

정말 고마워요! 감사! – sc13

+0

@ sc13 환영합니다 ^) –