Iphone 我是否可以向NSDecimalAdd()提供与leftOperator相同的NSDecimal作为结果?

Iphone 我是否可以向NSDecimalAdd()提供与leftOperator相同的NSDecimal作为结果?,iphone,cocoa-touch,uikit,Iphone,Cocoa Touch,Uikit,我不确定这是否会带来麻烦。通常情况下,我会总结几个值。我会这样做: val1 = val1 + val2; val1 = val1 + val3; val1 = val1 + val4; 等等。。。 我可以对NSDecimal执行类似的操作吗,还是不应该在参数中两次提供相同的NSDecimal“object”?(顺便问一下,这叫什么?不是“物体”,对吧?) 苹果说: NSDecimalAdd Adds two decimal values. NSCalculationError NSDeci

我不确定这是否会带来麻烦。通常情况下,我会总结几个值。我会这样做:

val1 = val1 + val2;
val1 = val1 + val3;
val1 = val1 + val4;
等等。。。 我可以对NSDecimal执行类似的操作吗,还是不应该在参数中两次提供相同的NSDecimal“object”?(顺便问一下,这叫什么?不是“物体”,对吧?)

苹果说:

NSDecimalAdd
Adds two decimal values.

NSCalculationError NSDecimalAdd (
   NSDecimal *result,
   const NSDecimal *leftOperand,
   const NSDecimal *rightOperand,
   NSRoundingMode roundingMode
);
讨论将左操作数添加到 RightOperator并将总和存储在 结果


我经常被NSDecimal和NSDecimal数字绊倒。对我来说,这是该框架为数不多的几次重大挫折之一……也许我还没有经历过像我在Cocoa/Touch的许多其他部分那样的“啊哈!”时刻?!?正如Aaron Hillegass所说,“Cocoa/Obj-C让普通的事情变得容易,也让困难的事情成为可能。”好吧,在这里,我认为一些普通的事情(使用十进制值)过于复杂……可以/应该简化


无论如何,在这种情况下,因为NSDecimalAdd接受两个指向NSDecimal的指针,并返回第三个指针,因此您可以将val1重用到您的内容中。您只需将每条语句的指针更改为新的返回值。

以下代码将完成上述添加操作:

NSCalculationError calculationError = NSDecimalAdd(&val1, &val1, &val2, NSRoundBankers);
calculationError = NSDecimalAdd(&val1, &val1, &val3, NSRoundBankers);
calculationError = NSDecimalAdd(&val1, &val1, &val4, NSRoundBankers);
假设您已将val1、val2和val3设置为nsdecimal。在本例中,我在溢出的情况下使用


我们在的核心部分使用了NSDecimal,因此我们创建了一些帮助函数,使这类计算变得更容易(如果效率稍低,则是因为在每次函数调用期间复制结构)。这些问题可以在项目中的中找到。

不想小气,但在过去几个小时里,你已经问了近十二个问题,也许你应该将你的答案改为:!IRTFM.;-)对不起,我知道。请恕我冒犯,它只是坐在那里,在一个球座上闪闪发光,所以必须有人打它……梅尔特米,如果TFM这么好,我就不用问了;-)相信我,我听你说:对于你的部分问题,NSDecimal是一个简单的C结构,而不是一个对象。我相信NSDecimal和NSDecimalNumber的结构是基于特定的原因。我同意可以有更好的方式在NSDecimal和各种格式之间交换数据,但我认为设计的其余部分是合理的。例如,上面的加法运算符经过了优化,因此不会复制参数和结果的结构,也不会复制指针。在阅读您的评论之前,我刚刚就这个参数内存问题提出了另一个问题。所以我尝试制作一个好用的包装器失败了;)好吧,我仍然会尝试做一个小包装,以至少摆脱那个丑陋的错误,我总是要处理的事情。想处理这个问题,太好了!我也在考虑编写一些帮助程序,但更像是使用方法而不是函数的实用程序类。我提出了一个问题,就是如何正确处理这些问题。你不能在CPUtilities中使用与NSDecimal相同的技术吗。。。功能是什么?i、 e.将指针指向结构而不是结构本身,并以某种方式“取消引用”给函数提供信息?不确定。。。在使用方面,这不会造成太大伤害。可以提供所有方法两次。一次用于指针,一次用于“惰性使用”。