如何在Objective C中使用不同的数字类型

时间:2009-05-21 12:20:55

标签: iphone objective-c numbers

所以我试图用Objective C中的数字做一些事情,并意识到有太多的选项,我只是对我的应用程序使用哪种类型感到困惑。

所以这里是类型。

  • NSNumber(这是一个班级)
  • NSDecmial(这是一个结构)
  • NSDecimalNumber(这是一个类)
  • float / double(原始类型)

基本上我需要做的是采用NSString,它代表基于小数的小时。 (10.4将是10小时和(4/10)* 60分钟)并将其转换为:

  1. 字符串表示D H:M(这需要除法,乘法和基本算术)
  2. 要存储的数字类型,以便于后面的计算(主要是在NSTimeIntervals和减法之间进行转换)
  3. 哦,我需要能够在这些

    上做一个绝对值

    看来硬件部分实际上是在类型之间转换。

    对我而言,这是一个非常微不足道的问题所以我不确定它是否会迟到或因为客观的C数字类型很糟糕,但我可以用一只手。

1 个答案:

答案 0 :(得分:5)

使用原始类型(double,CGFLoat,NSInteger)进行典型算术运算,以及何时需要将数字存储为实际变量,该变量主要用于其他地方的算术运算。您可以根据需要使用C数学函数(abs(),pow()等)。 NSTimeInterval是double的typedef,所以你可以互换这两个。

当您需要将数字存储为对象时,请使用NSNumber,例如,如果您要创建数字的NSArray。 Cocoa的某些部分(如Core Data或键值编码)对NSNumber的处理比原始类型更多,因此您可能会发现自己在这些情况下使用的NSNumber比平常更多。例如,如果您编写[timeKeepersArray valueForKeyPath:@"sum.seconds"],您将获得一个NSNumber,因此您可能会发现保留该变量更容易,而不是将其转换为原语。

由于在NSNumber和原始类型之间进行转换只需要少量的额外代码,因此通常您的应用程序最终会支持其中一个,具体取决于您对数字的处理方式。

哦,NSDecmial和NSDecimalNumber?不要过于担心它们,只有在需要精确的十进制操作时才会出现,例如存储财务数据时。