我经常需要把一个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 – 我该怎么办?
这实际上是一个相当微妙的问题,没有一个“正确的”答案.你如何计算输入值?你会对结果做些什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。