1. 程式人生 > 其它 >XZ_iOS之 CGFloat 數值計算之後,精度丟失的問題解決

XZ_iOS之 CGFloat 數值計算之後,精度丟失的問題解決

技術標籤:iOSSwiftiOS精度丟失問題CGFloat精度丟失問題

extension String {
/// 解決精度丟失問題
    func dealPrecisionLoss() -> String {
        let doubleValue = Double(self) ?? 0
        let doubleString = String(format: "%lf", doubleValue)
        let decNumber = NSDecimalNumber(string: doubleString)
        let outNumber = decNumber.stringValue
        return outNumber
    }
}

使用:將計算完的資料先轉成字串,解決精度問題,再轉回字串
var yingfukuan: CGFloat = rengoue.floatValue() / (1 + (annual_rate.floatValue() / 365.0 * due_day.floatValue()))
let yingfukuanStr = String(format: "%.2f", yingfukuan).dealPrecisionLoss()
yingfukuan = yingfukuanStr.floatValue()
let str = String(format: "%.2f", money).dealPrecisionLoss()

丟失精度可能會向下丟失精度,也可能會向上丟失精度,通常是在接收資料的時候,或者是在使用資料參與除法運算的時候;

使用NSDecimalNumber的multiplying 方法進行計算,依舊會丟失精度,最後使用上述方法徹底解決了精度丟失問題。