- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我做了这个方法
+ (CGFloat) round: (CGFloat)f {
int a = f;
CGFloat b = a;
return b;
}
它按预期工作,但只是向下舍入。如果它是负数,它仍会向下舍入。
这只是我制作的一个快速方法,它是否正确舍入并不是很重要,我只是为了我的游戏舍入相机的 x 和 y 值。
这个方法可以吗?快吗?或者有更好的解决方案吗?
最佳答案
这里的其他答案要么过时了,要么没有给出很好的例子。使用 Swift 内置的 rounded
函数可以很容易地对 CGFloat
进行舍入。
let x: CGFloat = 3.5
let y = x.rounded() // 4.0
如果你想就地舍入值,你可以使用round
:
var x: CGFloat = 3.5
x.round() // 4.0
如果您想更精确地控制数字的舍入方式,您可以使用 FloatingPointRoundingRule
.
x.rounded(.awayFromZero)
大于零的数字向上舍入,小于零的数字向下舍入。
3.000 -> 3.0
3.001 -> 4.0
3.499 -> 4.0
3.500 -> 4.0
3.999 -> 4.0
-3.000 -> -3.0
-3.001 -> -4.0
-3.499 -> -4.0
-3.500 -> -4.0
-3.999 -> -4.0
x.rounded(.down)
将具有小数值的任何数字向下舍入到下一个更小的整数。这与 floor(x)
相同。
3.000 -> 3.0
3.001 -> 3.0
3.499 -> 3.0
3.500 -> 3.0
3.999 -> 3.0
-3.000 -> -3.0
-3.001 -> -4.0
-3.499 -> -4.0
-3.500 -> -4.0
-3.999 -> -4.0
x.rounded(.toNearestOrAwayFromZero) // same as x.rounded()
小数四舍五入为最接近的整数值。但是,当值恰好位于中间时(如 3.5
或 -3.5
),则正数会向上舍入,负数会向下舍入。
它的名字可能很长很复杂,但这通常是人们在学校学习舍入的方式。如果您只是执行 x.rounded()
,这也是使用的规则。
3.000 -> 3.0
3.001 -> 3.0
3.499 -> 3.0
3.500 -> 4.0 ***
3.999 -> 4.0
-3.000 -> -3.0
-3.001 -> -3.0
-3.499 -> -3.0
-3.500 -> -4.0 ***
-3.999 -> -4.0
x.rounded(.toNearestOrEven)
这类似于 toNearestOrAwayFromZero
,只是现在 .5
值四舍五入为偶数。
3.000 -> 3.0
3.001 -> 3.0
3.499 -> 3.0
3.500 -> 4.0 ***
3.999 -> 4.0
4.500 -> 4.0 ***
-3.000 -> -3.0
-3.001 -> -3.0
-3.499 -> -3.0
-3.500 -> -4.0 ***
-3.999 -> -4.0
-4.500 -> -4.0 ***
x.rounded(.towardZero)
这只是具有截断任何小数值的效果。如果您需要 Int
,您可以使用 Int(x)
做同样的事情。
3.000 -> 3.0
3.001 -> 3.0
3.499 -> 3.0
3.500 -> 3.0
3.999 -> 3.0
-3.000 -> -3.0
-3.001 -> -3.0
-3.499 -> -3.0
-3.500 -> -3.0
-3.999 -> -3.0
x.rounded(.up)
这与 .down
相反。所有小数都向上舍入。这与 ceil(x)
相同。
3.000 -> 3.0
3.001 -> 4.0
3.499 -> 4.0
3.500 -> 4.0
3.999 -> 4.0
-3.000 -> -3.0
-3.001 -> -3.0
-3.499 -> -3.0
-3.500 -> -3.0
-3.999 -> -3.0
round
和rounded
的结果仍然是CGFloat
。如果您需要 Int
,您必须像 Int(myCGFloat)
一样转换它。round(x)
、ceil(x)
和 floor(x)
。但是,如果您确实使用它们,它们可以同时处理 64 位和 32 位架构,因此您可能已经通过 roundf
、ceilf
和 floorf
看到任何答案现在已经过时了。关于ios - 如何舍入 CGFloat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667130/
我似乎对 git 存储库有权限问题。 当我 pull 入一个不是我的 Linux 用户创建的目录时,我出现了这个错误。 fatal: Unable to create '/home/---/.git/
在 Git 中,您可以将给定目录克隆到给定目录: git clone ssh://gitolite@dev.bipper.com:3687/com/bipper/kids/portal 当我运行我们
目前,如果您在分支 V2 中并执行“git pull origin V3”,它会将 V3 merge 到 V2,甚至不会发出警告或提示。这个选项可以以某种方式被阻止吗?我在这里阅读了所有类似的问题,人
我刚开始使用 Oracle 的 Coherence 缓存,我注意到这一点:如果我在缓存中放入一个 ConcurrentHashMap 对象,当我检索它时,我可以看到它被转换为一个普通的 HashMap
看起来我缺少对 git pull 和 git commit 的基本理解,假设我在分支上工作,而它在我更新时被其他开发人员更新了在本地做我的工作。我应该在发出 git pull 之前提交更改,还是应该执
好的。所以我以为我已经舔过了……但现在…… 我有一个项目,其中包含一个来自 GitHub 的小型库作为子模块。在该 super 项目的原始版本中,子模块按预期工作。 但是,我只是克隆了 super 项
使用 Visual Studio Code 中的内置 Git,我看不到将指定的远程分支 pull 入当前分支的方法。我可以这样做吗? 示例:我正在分支 myBranch 上工作,更改已 merge 到
当我尝试提交或 pull 此错误时 Bus error (core dumped) 发生了! 当我用 gdb 调试它时,(gdb git,run commit -a,where) 结果是: mucul
我对默认 Rails Rake 任务的预期用途有点困惑,想咨询一下我是否应该使用 db:reset或编写自定义 Rake 任务。没什么聪明的,只是日常管理,而且我很可能会错过一个明显的文档,因为我是
所以我做了: git reset --hard #commithash # make a bunch of changes, fixes and so on. git add -A git commi
我已使用以下命令成功部署到 firebase 托管应用: firebase init firebase deploy 在这个阶段,我正在执行 git pull 以将 repo 下 pull 到暂存服务
当尝试在 Eclipse 的 git 存储库中 pull (团队|从上下文菜单中 pull )时,出现 Could not get advertised Ref for branch refs/hea
我是一名优秀的程序员,十分优秀!