XZ_iOS之 CGFloat 數值計算之後,精度丟失的問題解決
阿新 • • 發佈:2021-01-12
技術標籤: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 方法進行計算,依舊會丟失精度,最後使用上述方法徹底解決了精度丟失問題。