将 NSDecimalNumber 变为负数
Posted
技术标签:
【中文标题】将 NSDecimalNumber 变为负数【英文标题】:Turn a NSDecimalNumber negative 【发布时间】:2011-02-20 15:26:56 【问题描述】:我正在寻找一种方法,通过乘以 -1
将 NSDecimalNumber
变为负数。
/* decNumber is the one I would like to turn negative */
NSDecimalNumber *decNumber = [values objectAtIndex:billIndex];
NSDecimalNumber *minusOne = [[NSDecimalNumber alloc] initWithInt: -1];
finalValue = [[NSDecimalNumber alloc] initWithDecimal: [[decNumber decimalNumberByMultiplyingBy: minusOne] decimalValue]];
这行得通,但感觉对于这样一个简单的逻辑来说太过分了。你能想出更好的方法来实现这一点吗?
【问题讨论】:
【参考方案1】:您可以使用NSDecimalNumber>>decimalNumberWithMantissa:exponent:isNegative 更简洁地生成-1。
/* Answers (aDecimal x -1) */
NSDecimalNumber* negate(NSDecimalNumber *aDecimal)
return [aDecimal decimalNumberByMultiplyingBy:
[NSDecimalNumber decimalNumberWithMantissa: 1
exponent: 0
isNegative: YES]];
【讨论】:
为什么不直接使用[NSDecimalNumber decimalNumberWithString:@"-1"]
?
@MattDiPasquale - 这也可以。它可能效率不高,但是像临时对象一样创建新对象无论如何也不是那么有效。
@DShawley,非常感谢。我认为使用 string 方法更具可读性。但是,我认为方法的名称 negate
无论如何都清楚,所以我会采用您的解决方案以提高效率。谢谢! :)
不管怎样,我喜欢 Matt 的 decimalNumberWithString。它确实更容易阅读。它可能效率较低,但我喜欢易于阅读的东西。【参考方案2】:
与 D.Shawley 的回答类似,但具有扩展性和快速风格。
extension NSDecimalNumber
/* Answers (aDecimal x -1) */
func decimalNumberByNegating() -> NSDecimalNumber
return self.decimalNumberByMultiplyingBy(NSDecimalNumber(mantissa: 1, exponent: 0, isNegative: true));
【讨论】:
【参考方案3】:使用网桥as
extension NSDecimalNumber
func decimalNumberByNegating() -> NSDecimalNumber
return -(self as Decimal) as NSDecimalNumber
【讨论】:
以上是关于将 NSDecimalNumber 变为负数的主要内容,如果未能解决你的问题,请参考以下文章