Absolute Value (abs) of NSDecimalNumber without loss of precision

前端 未结 4 1322
情书的邮戳
情书的邮戳 2020-12-31 00:35

I need to get the absolute value of an NSDecimalNumber without loss of precision. I can\'t seem to find a way to do this without converting to decimal or float (with a loss

4条回答
  •  一向
    一向 (楼主)
    2020-12-31 01:11

    There is a minor error in the answer: negativeOne should be a pointer. Here is a revised answer:

    - (NSDecimalNumber *)abs:(NSDecimalNumber *)num {
        if [myNumber compare:[NSDecimalNumber zero]] == NSOrderedAscending) {
            // Number is negative. Multiply by -1
            NSDecimalNumber *negativeOne = [NSDecimalNumber decimalNumberWithMantissa:1
                                                                        exponent:0
                                                                      isNegative:YES];
            return [num decimalNumberByMultiplyingBy:negativeOne];
        } else {
            return num;
        }
    }
    

    And here is a version suitable to be used as a category on NSDecimalNumber:

    - (NSDecimalNumber *)abs {
        if ([self compare:[NSDecimalNumber zero]] == NSOrderedAscending) {
            // Number is negative. Multiply by -1
            NSDecimalNumber *negativeOne = [NSDecimalNumber decimalNumberWithMantissa:1
                                                                             exponent:0
                                                                           isNegative:YES];
            return [self decimalNumberByMultiplyingBy:negativeOne];
        } else {
            return self;
        }
    }
    

提交回复
热议问题