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 方法进行计算,依旧会丢失精度,最后使用上述方法彻底解决了精度丢失问题。

博客指出精度丢失可能在接收数据或数据参与除法运算时出现,有向下或向上丢失的情况。使用NSDecimalNumber的multiplying方法计算仍会丢失精度,最终用特定方法解决了iOS精度丢失问题。
613

被折叠的 条评论
为什么被折叠?



