如何执行 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
是一个值类型;就像 int
、float
等。然而,数学函数,例如 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
我正在尝试执行基本的 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
是一个值类型;就像 int
、float
等。然而,数学函数,例如 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