iOS浮点运算精度问题

2019-12-05  本文已影响0人  生命不止运动不息

无论是double还是float ,CPU位数都是有限的!
而浮点数,理论上是无限长的!
所以普通的浮点类型,进行运算就会出现精度问题。

解决方案:使用 NSDecimalNumber 类,替代double。

- (void)handleMinusBtn{
    
    UITextField *tf = self.amountView.itemView.inputView.textField;
    
    NSDecimalNumber *minNum = [NSDecimalNumber decimalNumberWithString:self.model.minAmount];
    
    NSDecimalNumber *currNum = [NSDecimalNumber decimalNumberWithString:tf.text];
    NSDecimalNumber *stepNum = [NSDecimalNumber decimalNumberWithString:[self getStepValueStr]];
    NSDecimalNumber *newNum = [currNum decimalNumberBySubtracting:stepNum];
    
    //若新值比最小值小,则直接展示最小值
    if( [newNum compare:minNum] == NSOrderedAscending ){
        newNum = minNum;
    }
    tf.text = newNum.stringValue;
}
上一篇 下一篇

猜你喜欢

热点阅读