2017-03-21 3 views
0

는 내가 "ammountRequest는"예를 들어 11.12에 해당하는 경우를 나타납니다 지불 페이지에, 나는이유형 NSDecimalNumber는 SDK 페이팔과 빠른 3

let ammountRequest: String = txtAmmount.text! 
let item = PayPalItem(name: "shop things", withQuantity: 1, withPrice: NSDecimalNumber(string: ammountRequest), withCurrency: "EUR", withSku: "Create Balance") 

let items = [item] 
let subtotal = PayPalItem.totalPrice(forItems: items) 

다음을 수행 페이팔로 보낼 항목을 만드는 오전하는 경우 11 대신 11 대신제거되기 때문에 소수점 이하 자릿수를 표시 할 수 있습니까?

답변

1

아마도 현지화를 제대로 다루지 않을 것입니다. NSDecimalNumber(string: ammountRequest)이 현재 로켈을 사용하여 문자열을 구문 분석하려고합니다. 따라서 문자열에 , (쉼표) 또는 . (점)이 현재 로캘에 따라 소수 구분 기호로 포함되어 있는지 확인해야합니다.

documentation의 토론은 로케일에 따라 허용되는 값을 설명합니다. 이 다루는

한 가지 방법은 . 모든 가능한 소수 구분 (.,)를 교체 한 후 영어 로케일 (이상적으로 POSIX 로케일)를 사용하는 것입니다 :

let amountString = "11.12" 
let normalizedAmountString = amountString.replacingOccurrences(of: "[,.]", with: ".", options: .regularExpression) 

let posixLocale = Locale(identifier: "en_US_POSIX") 

let amount = NSDecimalNumber(string: normalizedAmountString, locale: posixLocale) 
print(amount) 

주를 그 시대 NSDecimalNumber 대부분의 ., 모두 처리 할 수 ​​있습니다. . 또는 ,이 현재 로캘의 그룹화 구분 기호 인 경우 문제가 발생합니다.

PS : 스위프트 코드에서 NSDecimalNumber 대신 Decimal을 사용해야합니다.

+0

내 문제가 해결되었습니다. 정말 고맙습니다 – HideCode