gpt4 book ai didi

ios - 如何舍入 CGFloat

转载 作者:IT王子 更新时间:2023-10-29 08:09:47 27 4
gpt4 key购买 nike

我做了这个方法

+ (CGFloat) round: (CGFloat)f {
int a = f;
CGFloat b = a;
return b;
}

它按预期工作,但只是向下舍入。如果它是负数,它仍会向下舍入。

这只是我制作的一个快速方法,它是否正确舍入并不是很重要,我只是为了我的游戏舍入相机的 x 和 y 值。

这个方法可以吗?快吗?或者有更好的解决方案吗?

最佳答案

2018年答案

这里的其他答案要么过时了,要么没有给出很好的例子。使用 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 .

Away from zero

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

Down

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

To nearest or away from zero

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

To nearest or even

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 ***

Toward zero

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

Up

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

注意事项

  • 不要忘记考虑负值。
  • roundrounded 的结果仍然是CGFloat。如果您需要 Int,您必须像 Int(myCGFloat) 一样转换它。
  • 不再需要使用 C 数学函数 round(x)ceil(x)floor(x)。但是,如果您确实使用它们,它们可以同时处理 64 位和 32 位架构,因此您可能已经通过 roundfceilffloorf 看到任何答案现在已经过时了。

关于ios - 如何舍入 CGFloat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667130/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com