Absolute Value (abs) of NSDecimalNumber without loss of precision

前端 未结 4 1303
情书的邮戳
情书的邮戳 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:10

    You can use the built-in functions of the NSDecimalNumber class to compare the number to zero, then multiply by -1 as appropriate. For example:

    - (NSDecimalNumber *)abs:(NSDecimalNumber *)num {
        if ([num 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;
        }
    }

    Since this method works solely with NSDecimalNumbers, there's no loss of precision.

提交回复
热议问题