2017-11-10 2 views
0

나는 비슷한 질문이 요청 된 알고 있지만 난 아직 해결책을 알아 냈 없습니다. Swift에서 이중 값 간의 비교를 올바르게 처리하는 방법은 무엇입니까?

는이 같은 double 값을 얻고있다.

let priceUsdInt = (price as NSString).doubleValue 

는 그리고 그래서 1.00이 값을 비교하려면 :

if priceUsdInt > 1.00 { 
    let priceUsdCur = priceUsdInt.currencyUS 
    finalPriceUsdCur = priceUsdCur 
} else { 
    let priceUsdCur = priceUsdInt.currencyUS6 
    finalPriceUsdCur = priceUsdCur 
} 

이 항상 두 개의 소수 결과를 가져온다. 그렇다고하더라도 가치는 1.00보다 훨씬 낮습니다.

기본적으로 값이 1.00보다 작 으면 값을 6 자릿수까지 표시합니다. 즉 통화 형식으로 변환하면 0.123456, 즉 1.23 이후 두 자릿수 만 표시하지 않으면 표시됩니다.

감사합니다.

+1

는 더블을 사용하지 마십시오 1.0 통화. Decimal을 사용해야합니다. –

+0

전에 Decimal을 사용하지 않았습니다. Double 대신 Decimal을 사용하여 아래에서 답을 바꿀 수 있습니까? – sc13

+1

그냥'string (for : Any)'라고 사용합니다. 당신은 어떤 숫자 –

답변

1

string의 값이 double 값으로 coverted 때 통화 형식의 6 자리 정밀도를 보여주는 보여줍니다은 1.02 자리 정밀 아래에있을 때 그 위

let belowOne = ".12023456" 

let belowDoubleVal = Double(belowOne) ?? 0.0 

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

if belowDoubleVal < 1.0 { 
    // this handles the 6 digit precision you require when value is below 1.0 
    currencyFormatter.minimumFractionDigits = 6 
} 


// old way using NSSNumber 
// let belowOneString = currencyFormatter.string(from: NSNumber(value: belowDoubleVal)) 

// you can pass the double value to formatter using .string(for: Any) 
// thanks for pointing this out by Leo Dabus 
let belowOneString = currencyFormatter.string(for: belowDoubleVal) 
+1

당신이 할 수있는 (위해 : 모든) 포맷터'문자열을 사용'방법 –

+1

가 추가 정보를 당신에게 레오 감사 직접 더블를 전달합니다. – sc13

관련 문제