将NSDecimalNumber置为负数

时间:2011-02-20 15:26:57

标签: iphone objective-c nsdecimalnumber

我正在寻找一种通过乘以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]];

这样可行,但感觉就像这么简单的逻辑太多了。你能想到一个更好的方法来实现这个目标吗?

3 个答案:

答案 0 :(得分:15)

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

/* Answers (aDecimal x -1) */
NSDecimalNumber* negate(NSDecimalNumber *aDecimal) {
    return [aDecimal decimalNumberByMultiplyingBy:
                    [NSDecimalNumber decimalNumberWithMantissa: 1
                                                      exponent: 0
                                                    isNegative: YES]];
}

答案 1 :(得分:3)

类似于D.Shawley的回答,但延伸和迅捷的风格。

extension NSDecimalNumber {
    /* Answers (aDecimal x -1) */
    func decimalNumberByNegating() -> NSDecimalNumber {
        return self.decimalNumberByMultiplyingBy(NSDecimalNumber(mantissa: 1, exponent: 0, isNegative: true));
    }
}

答案 2 :(得分:0)

使用桥as

extension NSDecimalNumber {

    func decimalNumberByNegating() -> NSDecimalNumber {
        return -(self as Decimal) as NSDecimalNumber
    }
}