【问题标题】:How to get the value of an NSDecimalNumber from NSDecimal?如何从 NSDecimal 获取 NSDecimalNumber 的值?
【发布时间】:2013-04-15 09:12:34
【问题描述】:

我有一个对象数组,每个对象都有一个 NSDecimalNumber,称之为“大小”

对于数组中的每个对象,我将减去一个推荐的大小,称为 rSize。

然后我想进入生成的 NSDecimalNumber 并获取增量的值,并不关心它是正结果还是负结果。

我想我将使用返回 NSDecimal 结构的 decimalNumber 方法,所以问题是:结构中的哪个属性会给我 delta 的值?

换种说法:一个 NSDecimal 代表一个 NSDecimalNumber,但是 NSDecimal 结构的哪个属性持有该值?

非常感谢 抢

【问题讨论】:

  • 所有 NSDecimal struct 中的字段都持有“值”;你为什么不使用-decimalNumberBySubtracting:
  • 所有字段都有值吗? isNegative 是否持有价值? ;) 我也使用 decimalNumberBySubtraction,但结果可能是负值。我只想要增量的大小。
  • 是的,isNegative 包含值的 符号 部分 (+/-)。 “增量”是什么意思?
  • 差异的大小。因此,如果我有一个包含大小的对象数组:7、6、3、1,建议大小为 4。然后我将从每个大小中减去 4,得到:3、2、-1 和 -3。我真的不在乎它是正负,我只想要增量,所以 3,2,1,3。
  • 然后我可以按 delta 对对象数组重新排序,得到 3、6、1、7。因此数组中的第一个对象将最接近推荐的大小,即 3,而 6 将是第二接近的大小。我可以使用 isNegative 来判断它是更大还是更小,但我需要知道 NSDecimal 结构的哪些属性给出了它所描述的 NSDecimalNumber 的大小。

标签: ios nsdecimalnumber


【解决方案1】:

您的“delta”似乎是“rSize”与项目之间差异的绝对值。在这种情况下,您可以执行减法 (item – rSize),如果它完全在 NSDecimalNumber 内为负数,则将其乘以 -1:

NSDecimalNumber *negativeOne = [NSDecimalNumber decimalNumberWithMantissa:1 
                                                                 exponent:0
                                                               isNegative:YES];
NSDecimalNumber *delta = [item decimalNumberBySubtracting:rSize];
if ([delta compare:[NSDecimalNumber zero]] == NSOrderedAscending) {
    delta = [delta decimalNumberByMultiplyingBy:negativeOne];
}

然后在生成的增量对象上使用-compare: 选择器对对象数组进行排序。

【讨论】:

  • 是的,那行得通。谢谢。我可以按如下方式设置 negOne:NSDecimalNumber negOne = [NSDecimalNumber decimalWithString@"-1";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
相关资源
最近更新 更多