-2

我正在尝试执行基本的 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);

也失败了

4

1 回答 1

1

NSDecimal是一个值类型;就像int,float等。但是,数学函数,例如,获取它们的参数并通过地址NSDecimalAdd返回它们的结果- 即参数和结果必须是通过地址传递的变量,使用运算符获得,而不是通过值传递给函数。&

您的第二次尝试:

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

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

请求的属性表达式的地址

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

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因为它指示操作是否正确执行 ( NSCalculationNoError)。

高温高压

于 2016-03-10T09:05:39.720 回答