【发布时间】:2011-01-19 07:13:32
【问题描述】:
我想我快疯了。 “计数器”和“间隔”都是双打。这发生在 accelerometer:didAccelerate 上,间隔为 (.01) 。 “计数器”最终应该增加到“间隔”。出于某种原因,我无法让这个“如果”成真。
我是否忽略了什么?
double interval = .5;
if( counter == interval ){ //should eventually be .50000 == .50000
NSLog( @"Hit!" );
[self playSound];
counter = 0;
}else{
counter += .01;
}
NSLog( @"%f, %f, %d",counter,interval,(counter == interval) );
【问题讨论】:
-
是的,事实证明就是这样。虽然这似乎是相反的问题,但我使用了 float 类型并且它有效。谢谢赛斯
-
你不应该依赖float/double。使用 float 可以解决这个问题,但会在另一种情况下中断。尝试找出更好的解决方案。在许多情况下,使用 >= 而不是 == 可能会解决问题。
-
哇.. 是的,使用浮点数最终也不起作用。来自 AS3 和 JS,我真的不知道。谢谢大家。会更加努力地阅读浮点 wiki 页面。
-
根据 IEEE 754 而非特定语言来考虑双精度和浮点数。 IEEE 754 不保证两个浮点值相等(在
==意义上),即使您希望它们具有相同的值。使用这样的增量比较:if (fabs(counter - interval) < SOME_SMALL_ENOUGH_VALUE) ...;
标签: iphone objective-c ios floating-point