美文网首页
NSDecimalNumber货币准确运算 以及保留两位小数点设

NSDecimalNumber货币准确运算 以及保留两位小数点设

作者: DSA碼侬 | 来源:发表于2018-02-22 13:49 被阅读1058次

    有些时候在计算之后的结果会有要求保留一定位数精确值的情况:

    精确.jpeg

    比如:

    //保留两位并四舍五入
    NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
    // 文本框
    NSDecimalNumber *textNum = [NSDecimalNumber decimalNumberWithString:textStr];
    // 现金券值
    NSDecimalNumber *endShowMaxMoneyNum = [NSDecimalNumber decimalNumberWithString:self.endShowMaxCash];
    // 计算计算保留两位并四舍五入
    NSDecimalNumber *realReduceMoneyNum = [textNum decimalNumberBySubtracting:endShowMaxMoneyNum withBehavior:roundUp];
    

    1、枚举值分析:

    // Rounding policies :
    // Original
    // value 1.2 1.21 1.25 1.35 1.27
    // Plain 1.2 1.2 1.3 1.4 1.3 四舍五入
    // Down 1.2 1.2 1.2 1.3 1.2 向下取整
    // Up 1.2 1.3 1.3 1.4 1.3 向上取整
    // Bankers 1.2 1.2 1.2 1.4 1.3 (特殊的四舍五入,碰到保留位数后一位的数字为5时,根据前一位的奇偶性决定。为偶时向下取整,为奇数时向上取整。如:1.25保留1为小数。5之前是2偶数向下取整1.2;1.35保留1位小数时。5之前为3奇数,向上取整1.4)
    
    typedef NS_ENUM(NSUInteger, NSRoundingMode) {
    NSRoundPlain, // Round up on a tie
    NSRoundDown, // Always down == truncate
    NSRoundUp, // Always up
    NSRoundBankers // on a tie round so last digit is even
    };
    

    2、参数分析:

    //scale:保留有效小数的个数(为0的无效小数后自动过滤).
    //Exactness:进度异常、
    //Overflow:向上溢出、
    //Underflow:向下溢出、
    //DivideByZero:除数为0。当参数为YES出错会抛出异常,为NO时忽略异常。返回nil.
    
    NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler
     decimalNumberHandlerWithRoundingMode:NSRoundUp
     scale:2
     raiseOnExactness:NO
     raiseOnOverflow:NO
     raiseOnUnderflow:NO
     raiseOnDivideByZero:YES];

    相关文章

      网友评论

          本文标题:NSDecimalNumber货币准确运算 以及保留两位小数点设

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