1

可能重复:
CGFloat 添加错误?

CGFloats我有一些代码,为了找出转换的正确尺寸,我做了很多乘法和除法。我注意到有时当我想得到 320 的值时,我会得到 320.00000092。谁能解释为什么会发生这种情况以及如何纠正它?是不是应该这样做?以下是一些可能发生问题的示例代码:

- (void) setMinimumSize
{
    CGSize superViewSize = self.superview.bounds.size;
    CGSize size = self.frame.size;

    CGFloat xScale = superViewSize.width / size.width;
    CGFloat yScale = superViewSize.height / size.height;

    CGFloat minimumScale = MIN(xScale, yScale);
    self.minimumSize = CGSizeMake(size.width * minimumScale, size.height * minimumScale);
}

- (void) scaleToMinimumSize
{
    self.transform = CGAffineTransformScale(self.transform, self.minimumSize.width / self.frame.size.width, self.minimumSize.height / self.frame.size.height);
}
4

1 回答 1

4

不要比较相等,不适用于浮点(或双精度),而是将差异与适合您准确性需求的某个增量进行比较

这始终是十进制和浮点数的问题。

问一个中学生(1/3.0)*3.0,都说1。电脑说0.999999。

大多数时候,你不能指望 00.000000永远不会接近那个。

编辑:

如果浮动非常有用,您应该阅读此 http://en.wikipedia.org/wiki/IEEE_754-2008

还有每个计算机科学家都应该知道的关于浮点运算的知识

于 2013-01-17T12:58:05.233 回答