如何添加NSDecimalNumbers?

Ter*_*y B 21 iphone objective-c nsdecimalnumber

好吧,这可能是当天的愚蠢问题,但假设我有一个班级:

NSDecimalNumber *numOne   = [NSDecimalNumber numberWithFloat:1.0];
NSDecimalNumber *numTwo   = [NSDecimalNumber numberWithFloat:2.0];
NSDecimalNumber *numThree = [NSDecimalNumber numberWithFloat:3.0];
Run Code Online (Sandbox Code Playgroud)

为什么我不能有一个添加这些数字的函数:

- (NSDecimalNumber *)addThem {
    return (self.numOne + self.numTwo + self.numThree);
}
Run Code Online (Sandbox Code Playgroud)

我为一个白痴提前道歉,谢谢!

Fra*_*ger 23

你不能做你想要的,因为C和Objective C都没有运算符重载.相反,你必须写:

- (NSDecimalNumber *)addThem {
    return [self.numOne decimalNumberByAdding:
        [self.numTwo decimalNumberByAdding:self.numThree]];
}
Run Code Online (Sandbox Code Playgroud)

如果你愿意使用Objective-C++(将你的源代码重命名为.mm),那么你可以写:

NSDecimalNumber *operator + (NSDecimalNumber *a, NSDecimalNumber *b) {
    return [a decimalNumberByAdding:b];
}
Run Code Online (Sandbox Code Playgroud)

现在你可以写:

- (NSDecimalNumber *)addThem {
    return self.numOne + self.numTwo + self.numThree;
}
Run Code Online (Sandbox Code Playgroud)

去C++!


Int*_*oet 10

NSDecimalNumber是一个Objective C类,在实例化时,会生成一个包含数字的对象.您只能通过方法访问对象(以及一般的对象).Objective C没有办法直接表示对象的算术,所以你需要进行三次调用之一:

  • - [NSDecimalNumber doubleValue],在添加数字之前从对象中提取数字.链接
  • - [NSDecimalNumber decimalNumberByAdding],它创建了一个额外的对象,可能比你想要的多.链接
  • NSDecimalAdd,它再次创建了一个额外的对象,可能比你想要的多.链接


Vla*_*mir 6

请参阅NSDecimalAdd函数(以及NSDecimalMultiply,NSDecimalDivide,NSDecimalSubtract).


new*_*cct 2

[[numOne decimalNumberByAdding:numTwo] decimalNumberByAdding:numThree]
Run Code Online (Sandbox Code Playgroud)