2016-12-30 5 views
1

사용자가 다른 로케일에있을 때 iOS 계산에 다음과 같은 문제가 있습니다. 여기 유럽에서 소수점 구분 기호는 ","이며 다른 로케일에서는 "."일 수 있습니다. 사용자가 로캘에있는 동안 "." 모든 계산은 정상적으로 작동하지만 대신 쉼표를 사용하면 오류가 발생합니다. 여기에 간단한 코드는 지금까지의 :계산에서 로케일 소수점/쉼표로 iOS 오류를 해결하는 방법은 무엇입니까? (NumberFormatter 사용)

if let expense = expenseTextField.text 
     let expenseValue = Double(expense) 
     let guests = guestTextField.text 
     let guestValue = Double(guests) { 

     let result = round((expenseValue/guestValue) * 100)/100 

     resultLabel.text = priceString 
     //resultLabel.text = String(result) 
    } else { 
     resultLabel.text = "No values!" 
    } 

나는 지금까지 내가 여기에 다른 질문을 이해로 사용해 NumberFormatter를 사용해야 확신합니다,하지만 난이 작업을 수행하는 방법을하지 않고 문서하지 않는 문자열에서 double 또는 float을 만드는 방법을 샘플로 제공하십시오. 나는 다음을 시도하지만 오류가 나는 두 배를 생성하지 않고 계산을 위해 이러한 변수를 사용할 수 없습니다 둘 것을 주장 얻을 :

if let expense = expenseTextField.text 
     let expenseValue = String(expense), 
     let guests = guestTextField.text 
     let guestValue = String(guests) { 


     let expenseFormatter = NumberFormatter() 
     expenseFormatter.number(from: expenseValue) 

     let guestFormatter = NumberFormatter() 
     guestFormatter.number(from: guestValue) 

     let expenseDouble = Double(expenseFormatter) 
     let guestDouble = Double(guestFormatter) 


     let result = round((expenseDouble/guestDouble) * 100)/100 

     resultLabel.text = priceString 
    } else { 
     resultLabel.text = "No values!" 
    } 

나는 NumberFormatter는있는 사람 문자열에서 실제 복식을 만든 다음 계산에서 사용하는 방법을 잘 모르겠습니다 .

누군가 내게 팁을 줄 수 있습니까?

let expenseDouble = expenseFormatter.number(from: expenseValue)?.doubleValue ?? 0 
let guestDouble = guestFormatter.number(from: guestValue)?.doubleValue ?? 0 

포맷터/파서가 직접 number에 문자열을 변환 : 감사

+0

사용자에게 숫자를 표시 할 때는'NSNumberFormatter'를 사용해야합니다. 파싱 ​​할 때, 보통','을'.'로 대체하는 것으로 충분합니다. – Sulthan

+0

비록 그것이 내가 가장 우아한 것으로 보이지 않기 때문에 나는 그 해결책을 생각하지 않았다는 것을 인정해야하지만 잘 작동했다. – RjC

+0

(currencyFormatter = NumberFormatter는() currencyFormatter.usesGroupingSeparator = 사실 currencyFormatter.numberStyle = NumberFormatter.Style.currency currencyFormatter.locale = NSLocale.current 할 PRICESTRING = currencyFormatter.string하자 : 나는 문자열을 돌려주고 다음을 사용 for : result) print (priceString? 0) – RjC

답변

0

당신이 필요로하는 유일한 것은 제대로 메서드 호출을 작성하는 것입니다. 그런 다음 Double 값을 가져와야합니다. 구문 분석이 실패 할 수 있으므로 결과로 발생하는 선택 사항을 해결해야합니다 (예 : ?? 0을 사용하십시오.

+0

'NSNumber'를'Double'으로 변환해야합니다. (각 전환에 대해 별도의 포맷터가 필요하지 않습니다.) –

+0

@MartinR 네, 그는 또한 '문자열 (비용)'을 필요로하지 않습니다. – Sulthan