美文网首页
IOS功能(NSDecimalNumber) ----- NSD

IOS功能(NSDecimalNumber) ----- NSD

作者: ShawnAlex | 来源:发表于2022-01-21 10:38 被阅读0次

    先看一个例子

    例子

      NSString *a = @"103999";
      double c = [a doubleValue];
      NSLog(@"结果: %@", [NSString stringWithFormat:@"%f w", c / 10000.f]);
    
    结果

    那么我们保留1位小数, 看一下

    保留结果

    目标

    我们想要得到一个 10.3 的一个小数。

    之前的例子看出结果不正确, 被五入了, 但是我们有些情况下只需要截取小数点后1位不需要四舍五入。那么OC中高精度运算肯定要用 NSDecimalNumber处理

    NSString *a = @"103999";
    NSDecimalNumber *minNum = [NSDecimalNumber decimalNumberWithString:a];
    NSDecimalNumber *d = [NSDecimalNumber decimalNumberWithString:@"10000"];
    NSDecimalNumber * r = [minNum decimalNumberByDividingBy:d];
    NSLog(@"精确结果: %@", r);
    
    NSDecimalNumber处理

    可看出运算结果OK没有问题, 那么我们常规取小数点后1位试一试

    NSDecimalNumber 取1位小数错误示范

    可看到还是被四舍五入, 不满足我们想要的情况。但是我们知道NSDecimalNumber除法都正确, 只在后面截取出现了问题。那么我们看看NSDecimalNumber有没有自带的方法去处理, 那么有

    NSDecimalNumberHandler *round = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:1 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
    

    其中Model为转化模式, 可向上, 向下取整等

    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
    };
    

    scale为小数点后面截取位数

    • 1: 截取一位
    • 2: 截取两位
      ......

    完整代码

        NSString *a = @"103999";
        NSDecimalNumber *minNum = [NSDecimalNumber decimalNumberWithString:a];
        NSDecimalNumberHandler *round = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:1 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
        NSDecimalNumber * res = [minNum decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"10000"] withBehavior:round];
    
        NSLog(@"精确结果: %@", res);
    

    最终结果

    image.png

    相关文章

      网友评论

          本文标题:IOS功能(NSDecimalNumber) ----- NSD

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