Vetuka
Vetuka

Reputation: 1651

How to properly handle comparison between double values in Swift?

I know similar question has been asked but I still could not figured out the solution.

I am getting double value like this.

let priceUsdInt = (price as NSString).doubleValue

And I want to compare this value to 1.00 so:

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

This always bring two decimal results. Even-though value is way lower then 1.00.

Basically, what I want to achieve is if value is lesser then 1.00 then show it until six decimals i.e. 0.123456 when converted to currency format, if not show only two decimals after it i.e. 1.23.

Thank you for your time.

Upvotes: 0

Views: 2523

Answers (1)

carbonr
carbonr

Reputation: 6067

This demonstrates showing a 6 digit precision in currency formatting when the value from string coverted to double value is below 1.0 and 2 digit precision when its above 1.0

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)

Upvotes: 1

Related Questions