- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我经常需要将 CGFloat
floor 或 ceil 到 int
以计算数组索引。
我在 floorf(theCGFloat)
或 ceilf(theCGFloat)
中经常遇到的问题是 float 不准确。
如果我的 CGFloat
是 2.0f
但在内部它表示为 1.999999999999f
或类似的东西怎么办。我执行 floorf
并得到 1.0f
,这又是一个 float 。然而,我必须将这个野兽转换为 int,这可能会引入另一个问题。
是否有最佳实践如何将 float
设置为 int
或将其设置为 int
,这样 2.0
就不会意外设置为1
和类似 2.0
的东西永远不会意外地限制为 2
?
最佳答案
快速补充回答
对于那些来这里寻找如何使用 floor
和 ceil
和 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
更新
不再需要使用 C floor
和 ceil
函数了。您可以将 Swift round()
与 rounding rules 一起使用.
var myCGFloat: CGFloat = 3.001
myCGFloat.round(.down) // 3.0
myCGFloat.round(.up) // 4.0
如果您不想修改原始变量,则使用rounded()
。
注意事项
另见
关于ios - 如何安全地将 CGFloat 设置为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993981/
我试图随机生成 CGFloat 但不知道它是如何在 swift 3 中完成的。什么是 CGFloat.random(min: CGFloat, max: CGFloat) 相当于 swift 2 的
我收到一个错误,我不知道如何修复。错误是: Sending 'CGFloat' (aka 'float') to parameter of incompatible type 'CGFloat *'
我有一个自动布局便利功能,可以将 View 堆叠在彼此之上。对于我的间距参数,我想允许: View 之间的间距为零 或单个CGFloat(所有 View 均匀分布) 或 CGFloat 数组( Vie
尝试设置 CAShapeLayer 的 zPosition 时出现错误。这是代码: self.view.layer.sublayers[l].zPosition = CGFloat(1) 出于某种原因
我有一个像 CGFloat 数组 [[[1,2],[2,3]],[[6,1],[5,6]],[[6,1],[11,6],[21,3]]] 不,我想合并子数组并在每个子数组中添加数组数据,如 [[1,2
我有这个代码: let startX = CGFloat(arc4random_uniform(maxX + (quarterX*2))) - quarterX quarterX 是一个 CGFloa
我在 XCode 6 beta 4 上使用 swift 时遇到问题,这让我发疯 我正在 IOS 8 中开发游戏并且我遵循了教程但我得到了这个:Float is not convertible to C
我正在尝试使用 CGRect.insetBy( dx : ... , dy : ...) 但是代码给了我一个根本无法解决的错误。 func scaleRect (rect: CGRect , xSca
我不太理解这个编译错误,因为我没有得到这个错误并且可以在真实设备上编译和运行,但是如果我尝试在模拟器上构建和运行我会得到这个错误。 Cannot invoke initializer for type
我有一个简单的例子,我尝试画一个圆。下面这段代码没有给我一个圆圈。 import UIKit class PlayingCardView: UIView { override func dra
我正在尝试转换使用 Facebook's pop library 的 ObjC 类 swift 。 Pop 使用了相当多的 C。 在 ObjC 中,我有一个看起来像这样的 block ...... p
我必须将我的整数包装在 CGFloat() 中才能在 Swift 2.3 中编译 如果我只执行 * 2,那么它会编译。为什么会这样?这在 Swift 3 中已修复吗? var multiplier =
我正在尝试创建一个带有CGFloat参数并返回CGFloat的块变量。 CGFloat (^debt)(CGFloat) = ^(CGFloat myFloat) { return myFloa
label.position = CGPointMake(self.size.width*0.125, self.size.height-CGFloat(0.15)*self.size.height*
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
如果这说明了问题,这里是原始的 Objective-C 代码。 int x = (arc4random()%(int)(self.gameView.bounds.size.width*5)) - (i
我正在尝试将 Float 值转换为 CGFloat 值,这里是我的代码: let myFloatForR = 0 let r = CGFloat(myFloatForR) le
我是 sprite kit 2d 游戏开发的新手。现有的 swift2 项目运行良好,但不幸的是更新 swift4 后流动代码出现错误。我该如何解决这个问题 class SGScene : SKSce
我的 .h 类中有以下内容: extern CGFloat tableMarginSide; extern CGFloat tableMarginTop; extern CGFloat fromIma
在我的 CGFloat 包装器中,我收到一个错误 Returning CGFloat (aka Double) from a function result type CGfloat aka doub
我是一名优秀的程序员,十分优秀!