ios – 如何安全地将CGFloat放置在底部或内部?

我经常需要把一个CGFloat或者一个CGFloat放在一个int中,用于计算一个数组索引.

我用floorf(theCGFloat)或ceilf(theCGFloat)永久性地看到的问题是浮点不准确会造成麻烦.

那么如果我的CGFloat是2.0f,而在内部它被表示为1.999999999999f或类似的东西.我做floorf并得到1.0f,这是一个浮动.然而,我必须把这个野兽变成int,这可能引发另外一个问题.

有没有一个最佳实践,如何将一个浮动浮动到一个int,使得像2.0这样的东西永远不会意外地被置于1,像2.0这样的东西永远不会被忽略到2?

解决方法

你的问题有几个误解.

what if my CGFloat is 2.0f but internally it is represented as 1.999999999999f

不能发生; 2.0,像所有相当小的整数一样,在浮点中具有精确的表示.如果你的CGFloat是2.0f,那么它真的是2.0.

something like 2.0 would never accidentally get ceiled to 2

2.0的上限为2;还有什么可能呢?

我认为你真正问的问题是“假设我做了一个计算,产生一个不精确的结果,数学上应该是2.0,但实际上稍微少一些;当我应用于这个值时,我得到1.0而不是2.0 – 我该怎么办?

这实际上是一个相当微妙的问题,没有一个“正确的”答案.你如何计算输入值?你会对结果做些什么?

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...