如何正确处理Swift中double值的比较?

时间:2017-11-10 13:13:34

标签: swift compare 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然后显示它直到六位小数,即转换为货币格式时为0.123456,如果不显示其后只有两位小数,即1.23。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

这表明当string转换为double值的值低于1.0 2位时,货币格式显示 6位精度精度高于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)