Swift中如何区分整数部分和小数部分?如何将小数部分转换为 Int

How to separate integral part and fractional part in Swift? An how to transform fractional part into Int

我分离了小数部分,但现在我需要将该部分设为 Int

例如:

0.5 -> 5
0.63 -> 63


let a1 = 2.5
let a2 = 7.63
let a3 = 8.81
let a4 = 99.0
let a1Frac = a1.truncatingRemainder(dividingBy: 1)
let a2Frac = a2.truncatingRemainder(dividingBy: 1)
let a3Frac = a3.truncatingRemainder(dividingBy: 1)
let a4Frac = a4.truncatingRemainder(dividingBy: 1)

首先,如果您想保留小数位数的精度,您应该使用 Swift Decimal 类型。其次要获得它的分数值,你可以检查这个 。一旦你有了小数部分,你所需要的就是得到它们的有效数值:

extension Decimal {
    func rounded(_ roundingMode: NSDecimalNumber.RoundingMode = .bankers) -> Decimal {
        var result = Decimal()
        var number = self
        NSDecimalRound(&result, &number, 0, roundingMode)
        return result
    }
    var whole: Decimal { self < 0 ? rounded(.up) : rounded(.down) }
    var fraction: Decimal { self - whole }
}

let a1 = Decimal(string: "2.5")!
let a2 = Decimal(string: "7.63")!
let a3 = Decimal(string: "8.81")!
let a4 = Decimal(string: "99")!

let a1Frac = a1.fraction  // 0.5
let a2Frac = a2.fraction  // 0.63
let a3Frac = a3.fraction  // 0.81
let a4Frac = a4.fraction  // 0

let a1significand = a1Frac.significand  // 5
let a2significand = a2Frac.significand  // 63
let a3significand = a3Frac.significand  // 81
let a4significand = a4Frac.significand  // 0

如果您需要将 Decimal 值转换为 Int,您只需将其转换为 NSDecimalNumber 并获取其 intValue 或将这些扩展添加到您的项目中将相同的 NSDecimalNumber 功能添加到 Swift Decimal 类型:

extension Decimal {
    var decimalNumber: NSDecimalNumber { self as NSDecimalNumber}
    var intValue: Int { decimalNumber.intValue }
}

a1significand.intValue  // 5
a2significand.intValue  // 63
a3significand.intValue  // 81
a4significand.intValue  // 0