NSDecimalNumber,精确计算价格
NSDecimalNumber,精确计算价格
iOS赵师顺 发表于9个月前
NSDecimalNumber,精确计算价格
  • 发表于 9个月前
  • 阅读 50
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: NSDecimalNumber是iOS系统的api,是一种精确计算。主要解决一下问题: 1、字符串转float等不精确问题。 2、精确计算 3、保留小数位数 4、四舍五入及其它的保留小数位数规则
    /**
     NSRoundPlain,   // Round up on a tie //貌似取整
     
     NSRoundDown,    // Always down == truncate  //只舍不入
     
     NSRoundUp,      // Always up    // 只入不舍
     
     NSRoundBankers  // on a tie round so last digit is even  貌似四舍五入
     */
    
    /**
     scale:保留有效小数的个数(为0的无效小数后自动过滤).
     Exactness:进度异常、
     Overflow:向上溢出、
     Underflow:向下溢出、
     DivideByZero:除数为0。当参数为YES出错会抛出异常,为NO时忽略异常。返回nil.
     */
    NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler
                                       decimalNumberHandlerWithRoundingMode:NSRoundBankers
                                       scale:2
                                       raiseOnExactness:NO
                                       raiseOnOverflow:NO
                                       raiseOnUnderflow:NO
                                       raiseOnDivideByZero:YES];
    
// 1 字符串 转化NSDecimalNumber
    NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:@"123.001"];
    NSLog(@"%@",num1);
//2 基本数据类型 转化NSDecimalNumber
    NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInteger:456] decimalValue]];
    NSLog(@"%@",num2);
    //  NSDecimalNumber 转化成 String
    _label.text = num2.stringValue;
    
// 3 加法运算
    NSDecimalNumber *num3 = [num1 decimalNumberByAdding:num2];
    NSLog(@"%@",num3);
    NSDecimalNumber *num4 = [num1 decimalNumberByAdding:num2 withBehavior:roundUp];
    NSLog(@"%@",num4);
    
// 4 减法运算
    NSDecimalNumber *num5 = [num1 decimalNumberBySubtracting:num2];
    NSLog(@"%@",num5);
    
// 5 乘法运算
    NSDecimalNumber *num6 = [num1 decimalNumberByMultiplyingBy:num2];
    NSLog(@"%@",num6);

// 6 除法运算
    NSDecimalNumber *num7 = [num2 decimalNumberByDividingBy:num1];
    NSLog(@"%@",num7);

// 7 比较
    /**
     NSDecimalNumber 与 NSNumber 的比较
     */
   BOOL tureOrFlase =  [num1 isEqualToNumber:@(90)];
    NSLog(@"%d",tureOrFlase);
    /**
     NSDecimalNumber 与 NSDecimalNumber 比较
     */
    NSComparisonResult result = [num1 compare:num2];
    NSLog(@"%ld",(long)result);

 

共有 人打赏支持
粉丝 3
博文 70
码字总数 33551
×
iOS赵师顺
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: