我有一个方法需要做一个不同的事情,当给定一个未设置的浮动比值为0的浮动。基本上,我需要检查一个变量是否已被计算,如果它有一个值设置0如何区分未设置的浮点数和值为0的浮点数?
所以,我应该用什么作为占位一个没有设置(NIL,NULL,NO等)和如何测试,看是否有变量没有设置不为0的值返回true ?
我有一个方法需要做一个不同的事情,当给定一个未设置的浮动比值为0的浮动。基本上,我需要检查一个变量是否已被计算,如果它有一个值设置0如何区分未设置的浮点数和值为0的浮点数?
所以,我应该用什么作为占位一个没有设置(NIL,NULL,NO等)和如何测试,看是否有变量没有设置不为0的值返回true ?
当变量合法地获得该常数的值时,使用常数值指示未设置状态通常会导致错误。
考虑使用NSNumber
来存储你的浮点数。这样它不仅可以是nil
,它将默认为该状态。
这假定你只需要少量的花车。如果您需要上百万个,那么NSNumber
可能太慢并且需要大量内存。
我需要用这些浮标做数学运算,所以NSNumber并不理想。我想我可以暂时转换,但这似乎很昂贵和不必要。您能否扩展使用NaN之类的危险? – Nathan 2012-04-17 02:35:19
危险是如果您的浮动可能最终分配,但保存值NaN,以便您的代码将其视为未分配。当然,无论如何,你都不应该盲目地将NaN传递给大多数的数学例程。如果这些值来自用户,告诉他们在输入NaN时重新输入也是合乎逻辑的。 – Dondragmer 2012-04-17 02:43:37
而不是重载这些float
属性(我们称之为X和Y),为每个属性创建一个单独的isValid
标志。初始化标志以指示浮点数尚未设置,并提供您自己的setter来适当地管理标志。所以,你的代码可能看起来像:
if (self.isXValid == YES) {
self.Y = ... // assigning to Y sets isYValid to YES
}
else if (self.isYValid == YES) {
self.X = ... // assigning to Y sets isXValid to YES
}
其实你可以走了一步,有setter方法X还指派Y和反之亦然。或者,如果X和Y紧密联系以便可以基于另一个的值计算一个值,那么对于这两个属性实际上只需要一个变量。
为什么不是NaN(比如1.0/0.0)?要测试一个浮点数是否为NaN,它就是'num!= num'(NaN不等于任何东西,甚至本身)。 – cHao 2012-04-17 02:23:42
通过除零来获取NaN是危险的,因为它可能会陷入/产生信号NaN – 2012-04-17 02:31:39
有没有更好的方法?我没有足够担心如何*故意*生成它们。 :)很确定'NaN'不会像浮动文字那样工作...... – cHao 2012-04-17 02:32:20