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