11

我正在寻找一种方法来NSDecimalNumber通过乘以变成负数-1

/* decNumber is the one I would like to turn negative */
NSDecimalNumber *decNumber = [values objectAtIndex:billIndex];

NSDecimalNumber *minusOne = [[NSDecimalNumber alloc] initWithInt: -1];
finalValue = [[NSDecimalNumber alloc] initWithDecimal: [[decNumber decimalNumberByMultiplyingBy: minusOne] decimalValue]];

这行得通,但感觉对于这样一个简单的逻辑来说太过分了。你能想出更好的方法来实现这一目标吗?

4

3 回答 3

17

您可以使用NSDecimalNumber>>decimalNumberWithMantissa:exponent:isNegative更简洁地生成 -1。

/* Answers (aDecimal x -1) */
NSDecimalNumber* negate(NSDecimalNumber *aDecimal) {
    return [aDecimal decimalNumberByMultiplyingBy:
                    [NSDecimalNumber decimalNumberWithMantissa: 1
                                                      exponent: 0
                                                    isNegative: YES]];
}
于 2011-02-20T16:12:38.740 回答
3

类似于 D.Shawley 的答案,但扩展和快速风格。

extension NSDecimalNumber {
    /* Answers (aDecimal x -1) */
    func decimalNumberByNegating() -> NSDecimalNumber {
        return self.decimalNumberByMultiplyingBy(NSDecimalNumber(mantissa: 1, exponent: 0, isNegative: true));
    }
}
于 2015-01-05T19:53:45.613 回答
0

使用桥接as

extension NSDecimalNumber {

    func decimalNumberByNegating() -> NSDecimalNumber {
        return -(self as Decimal) as NSDecimalNumber
    }
}
于 2020-12-10T09:47:20.157 回答