首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果对CGFloat值进行比较- Xcode 7会出现错误

如果对CGFloat值进行比较- Xcode 7会出现错误
EN

Stack Overflow用户
提问于 2015-10-02 20:18:27
回答 3查看 1.7K关注 0票数 2

我有以下代码:

代码语言:javascript
复制
 @property (nonatomic, assign) CGFloat floatValue;

--

代码语言:javascript
复制
 if (floatValue)
 {
    //Do something
 }

由于Xcode 7-编译器发生错误:

隐式转换将浮点数转换为整数:“CGFloat”到“bool”。

有人能解释一下正在进行的/建议的代码编辑来纠正吗?

EN

回答 3

Stack Overflow用户

发布于 2015-10-02 21:13:20

这取决于如何实现从CGFloat到Bool的转换。这可能取决于Objective的实现,甚至取决于实际处理器对IEEE浮点规范的实现。

不管怎样,你绝对不应该依赖这个。特别是因为浮标不一定准确。您可能会得到接近0的非常接近的东西,但是if语句会失败。

您应该显式地对要查找的值进行浮点测试,如下所示:

代码语言:javascript
复制
if (floatValue != 0.0f)
{
    //we know exactly what will happen
}

在Swift中,编译器甚至不允许您这样做,因为它试图保护您的安全:

代码语言:javascript
复制
if (floatValue)
{
    //might happen, might not. who knows
}

在Swift中,只有当if (variable)类型为Bool时,才可以使用variable语法。

Objective编译器不会强迫您进行这种行为,但是如果您希望代码能够以可预测的方式运行并且是可移植的,那么您应该遵守它。

票数 6
EN

Stack Overflow用户

发布于 2015-10-02 20:20:40

您需要明确地询问floatValue是否等于0.0,或者更好的是,它的绝对值是否小于某些可接受的epsilon (例如0.000001)。

或者直接强制使用NSInteger来截断--但这是相当愚蠢的,因为0.9将以0结尾。

票数 2
EN

Stack Overflow用户

发布于 2015-10-02 21:48:57

隐式转换将浮点数转换为整数:“CGFloat”到“bool”。

同样重要的是,这里提到的CGFloat正在被转换成BOOL而不是bool。这基本上是因为事情发生在ARM64上(参见https://www.bignerdranch.com/blog/bools-sharp-corners/)。正如上面的人所说,有必要显式地将“零的绝对值”进行比较。然而,这并不总是意味着与0.0f或0.0相比(参见本文:https://stackoverflow.com/a/10334944/2799410)。顺便说一句,matt刚刚指出,将0与treshold相比较比仅将其与0.0和/或0.0f相比较要好得多。

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

https://stackoverflow.com/questions/32915224

复制
相关文章

相似问题

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