数字存储和平等的奇怪行为

时间:2016-11-29 23:40:31

标签: ios objective-c floating-point

我正在尝试跟踪视图高度的变化,以通知观察者。我将视图的高度存储在属性中,以便在-layoutSubviews中进行比较。接下来会发生什么我无法解决。它出现在Retina HD设备(6 Plus,7 Plus)上,我的视图高度报告为200.00000000000003(设置为200.0)。

这个号码让我很困惑,但我想我可以解决它。

@property (nonatomic) CGFloat previousHeight;
...

const CGFloat currentHeight = self.frame.size.height;
if (currentHeight != self.previousHeight) {
    self.previousHeight = currentHeight;
    DLog (@"Different");
}

我认为将两个值存储到同一类型会消除这个问题,但比较仍然会通过。也就是说,无论我如何尝试存储当前高度,if语句都是毫无意义的。即使在调试器中打印不同的属性,也会将我的属性打印为圆形浮点数,将currentHeight变量打印为非常精确的浮点数。

如果不手动舍入视图的高度,或将其存储为整数,我还应该做些什么?我必须遗漏关于双打和浮动的存储/相等的事情。

0 个答案:

没有答案