因此,我正在尝试使用Objective C中的数字做一些事情,并意识到有太多的选项,我只是对我的应用程序使用哪种类型感到困惑.
所以这里是类型.
NSNumber(这是一个类)
NSDecmial(这是一个结构)
NSDecimalNumber(这是一个类)
float/double(原始类型)
所以基本上我需要做的是采用NSString,它代表基于小数的小时.(10.4将是10小时和(4/10)*60分钟)并将其转换为:
字符串表示DH:M(这需要除法,乘法和基本算术)
要存储的数字类型,以便于后面的计算(主要是在NSTimeIntervals和减法之间进行转换)
哦,我需要能够在这些上做一个绝对值
似乎困难的部分实际上是在类型之间转换.
对我来说这是一个非常微不足道的问题所以我不确定它是否迟到或者因为客观的C数字类型很糟糕,但我可以用一只手.
使用原始类型(double,CGFLoat,NSInteger)进行典型算术运算,以及何时需要将数字存储为实际变量,该变量主要用于其他地方的算术运算.您可以根据需要使用C数学函数(abs(),pow()等).NSTimeInterval是double的typedef,所以你可以互换这两个.
当您需要将数字存储为对象时,请使用NSNumber,例如,如果您要创建数字的NSArray.Cocoa的某些部分(如Core Data或键值编码)对NSNumber的处理比原始类型更多,因此您可能会发现自己在这些情况下使用的NSNumber比平常更多.例如,如果你写的[timeKeepersArray valueForKeyPath:@"sum.seconds"]
话你会得到一个NSNumber,所以你可能会发现保留该变量而不是将其转换为原语更容易.
由于在NSNumber和原始类型之间转换的是少量额外代码,因此通常您的应用程序最终会偏向于其中一个,具体取决于您对数字的处理方式.
哦,NSDecmial和NSDecimalNumber?不要过于担心它们,只有在需要精确的十进制操作时才会出现,例如存储财务数据时.