美文网首页
iOS浮点运算精度问题

iOS浮点运算精度问题

作者: 生命不止运动不息 | 来源:发表于2019-12-05 12:57 被阅读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;
    }
    

    相关文章

      网友评论

          本文标题:iOS浮点运算精度问题

          本文链接:https://www.haomeiwen.com/subject/oledgctx.html