1

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

所以这里是类型。

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

所以基本上我需要做的是取一个 NSString,它代表基于十进制的小时数。(10.4 将是 10 小时和 (4/10)*60 分钟)并将其转换为:

  1. 字符串表示 DH:M(这需要除法、乘法和基本算术)
  2. 一个数字类型来存储以便以后计算(主要是在 NSTimeIntervals 和做减法之间转换)

哦,我也需要能够在这些上做一个绝对值

看起来困难的部分实际上是在类型之间转换。

对我来说,这是一个非常微不足道的问题,所以我不确定是迟到还是因为客观 C 数值类型很烂,但我可以用手。

4

1 回答 1

4

将原始类型(double、CGFLoat、NSInteger)用于典型算术,以及当您需要将数字存储为实例变量时,该变量将主要用于其他地方的算术运算。您可以根据需要使用 C 数学函数(abs()、pow() 等)。NSTimeInterval 是 double 的 typedef,因此您可以将两者互换。

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

由于在 NSNumber 和原始类型之间转换是少量的额外代码,因此通常您的应用程序最终会根据您对数字的处理方式偏爱其中一种。

哦,还有 NSDecmial 和 NSDecimalNumber?不要太担心它们,它们只会在您需要非常精确的十进制运算时出现,例如在存储财务数据时。

于 2009-05-21T12:49:36.950 回答