如何执行 NSDecimal 数学?

How to perform NSDecimal Math?

我正在尝试执行基本的 NSDecimal 数学运算,例如 NSDecimals 的加法和减法。这有可能实现吗? 尝试使用 NSDecimalAdd 出现错误

NSDecimal' 到不兼容类型的参数 'NSDecimal * _Nonnull'

_meat.colonyQueenObject.count.creatureCount = [colonyQueenNumber decimalValue];


-(void)adjustCountsCreatureCountforAddedCreatures:(NSDecimal)creaturesAdded meatCount:(NSDecimal)meatCount larvaCount:(NSDecimal)larvaCount creatureType:    (int)creatureType{

    NSDecimalAdd(_meat.colonyQueenObject.count.creatureCount, _meat.colonyQueenObject.count.creatureCount, &creaturesAdded, NSRoundBankers);


    }


   NSDecimalAdd(&_meat.colonyQueenObject.count.creatureCount, &_meat.colonyObject.count.creatureCount, &creaturesAdded, NSRoundBankers);

同样失败

NSDecimal 是一个值类型;就像 intfloat 等。然而,数学函数,例如 NSDecimalAdd,将它们的参数和 return 它们的结果 通过地址 [=36] =] - 即参数和结果必须是 变量 通过地址传递,使用 & 运算符获得,而不是通过值传递给函数。

您的第二次尝试:

NSDecimalAdd(&_meat.colonyQueenObject.count.creatureCount,
             &_meat.colonyObject.count.creatureCount,
             &creaturesAdded,
             NSRoundBankers);

最接近正确,但前两个参数不正确,因为您试图传递 属性 的地址 - 这是不可能的。所以你应该看到这样的错误:

Address of a property expression requested

如果您希望使用属性,则必须使用临时中间局部变量来保存您的值。例如。类似于:

NSDecimal leftOperand = _meat.colonyObject.count.creatureCount; // copy left operand value to variable
NSDecimal result; // variable for result
NSDecimalAdd(&result,
             &leftOperand,
             &creaturesAdded,
             NSRoundBankers);
_meat.colonyQueenObject.count.creatureCount = result; // assign result to property

您还应该检查 NSDecimalAdd 的 return 值,因为它表明操作是否正确执行 (NSCalculationNoError)。

HTH