double计算时会出现一些精准失真问题,尤其在计算百分比和手续费用过程中较为多,需要使用到NSDecimalNumber计算,基本不使用Double,保证正确率
通常我们遇到的百分比的情况,如到手的数据是0.005567,需要转换为0.5567%,具体处理方式如下:
// double计算时需要计算精确度,防止出现无限循环
let percentNumber = NSDecimalNumber(string: percentStr ?? "")
let percentShow = percentNumber.multiplying(by: 100)
let behavior = NSDecimalNumberHandler(roundingMode: .plain, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
let resultshow = percentShow.rounding(accordingToBehavior: behavior)
logDebug("0.005567转换为百分比格式 -> \(resultshow.stringValue)%")
如不需要转换为百分比格式,仅为限制数据展示正确性,100改为1即可:
percentNumber.multiplying(by: 1)
这是我在网上找到的处理方式,原本指向了一个作者的地址,但是好像无效了,我就直接上代码了,如有侵权联系我,我改。
网友评论