首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用floorf与floor

使用floorf与floor
EN

Stack Overflow用户
提问于 2021-05-15 02:48:46
回答 1查看 103关注 0票数 1

我的代码中有以下情况:

代码语言:javascript
复制
//maxiumumHeight and rowHeight are CGFloats
CGFloat rows = floorf(maximumHeight / rowHeight);
CGFloat height = (rows * rowHeight);

它工作得很好,但我注意到当我使用floor时,它也工作得很好。我也不知道如何定义rows,它应该是NSUInteger还是CGFloat

它似乎在所有场景下都工作得很好,但我在理解浮点数学方面有一点困难,我想知道做这段代码的最佳方式是什么?或者这有关系吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-15 17:50:40

floor用于double (与CGFloat相同),floorf用于float (意味着它接受float参数)。这是老生常谈的东西。由于您在floor中使用CGFloat stick。但是,以防万一,我会添加一点容差,因此将其更改为例如。

代码语言:javascript
复制
CGFloat rows = floor ( ( maximumHeight + 0.5 ) / rowHeight );

假设这些值始终是严格的正数。

通常您会将行数转换为整数,但由于您使用它计算UI高度,因此这里不需要使用整数,因为它也将用作CGFloat。(请注意,如果你正在观察,CGFloatfloat,所以你会想要使用floorf,但是在许多架构上,floorfloorf是同一个)。

不确定这是否是困扰您的问题,但是floor向下舍入到最接近的int。因此,如果您有100个像素可用,并且您希望一行有20个像素,那么您将拥有

代码语言:javascript
复制
100 / 20 = 5

行。如果你想要它是21像素呢?然后

代码语言:javascript
复制
100 / 21 = 4.76

现在你需要做决定了。如果要在此处插入4行,则使用floor,因为

代码语言:javascript
复制
floor ( 4.7 ) = 4.0

注意,由于您只使用了4行,因此每行的高度将为

代码语言:javascript
复制
100 / 4 = 25

像素,比您希望的21行要多一点(因为您使用的行数更少)。

如果您想要使用5行,则使用ceil或ceiling,因为

代码语言:javascript
复制
ceil ( 4.7 ) = 5.0

注意,由于您使用了更多的行,因此高度将为

代码语言:javascript
复制
100 / 5 = 20

像素。因此,如果您希望的21是最大值,那么在此特定示例中将使用ceil。如果它是最小的,同样,你可以使用floor

有时,您可能会得到有趣和意外的值,例如

代码语言:javascript
复制
100 / 20 = 4.999999999

这就是为什么我要加一点忍耐力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67539565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档