我经常需要在地板或天花板上安装CGFloat
to an int
,用于计算数组索引。
我永远看到的问题floorf(theCGFloat)
or ceilf(theCGFloat)
是浮点不准确可能会带来麻烦。
那如果我的CGFloat
is 2.0f
但在内部它表示为1.999999999999f
或类似的东西。我愿意floorf
并得到1.0f
,这又是一个浮点数。但我必须将这个野兽转换为 int ,这可能会带来另一个问题。
是否有最佳实践如何铺设地板或天花板float
to an int
这样就像2.0
永远不会意外地陷入困境1
和类似的东西2.0
永远不会意外地达到上限2
?
快速补充答案
我将其添加为对于那些来这里寻找如何使用的人的补充答案floor
and ceil
with a CGFloat
(就像我一样)。
var myCGFloat: CGFloat = 3.001
floor(myCGFloat) // 3.0
ceil(myCGFloat) // 4.0
如果一个Int
是需要的,那么就可以将其转换为一。
var myCGFloat: CGFloat = 3.001
Int(floor(myCGFloat)) // 3
Int(ceil(myCGFloat)) // 4
Update
不需要使用Cfloor
and ceil
功能不再了。您可以使用斯威夫特round()
with 舍入规则 https://stackoverflow.com/a/34785079/3681880.
var myCGFloat: CGFloat = 3.001
myCGFloat.round(.down) // 3.0
myCGFloat.round(.up) // 4.0
如果您不想修改原始变量,则使用rounded()
.
Notes
See also
- 如何对 CGFloat 进行四舍五入 https://stackoverflow.com/a/34785079/3681880
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)