【发布时间】:2010-12-09 12:42:06
【问题描述】:
在算法的某个时刻,我需要将类属性的浮点值与浮点数进行比较。所以我这样做:
if (self.scroller.currentValue <= 0.1) {
}
currentValue 是一个浮点属性。
但是,当我有相等和self.scroller.currentValue = 0.1 时,if 语句没有完成并且代码没有执行!我发现我可以通过将 0.1 转换为浮动来解决这个问题。像这样:
if (self.scroller.currentValue <= (float)0.1) {
}
这很好用。
谁能向我解释为什么会这样? 0.1 是默认定义为 double 还是什么?
谢谢。
【问题讨论】:
-
另请参阅“每位计算机科学家应了解的浮点运算知识:”docs.sun.com/source/806-3568/ncg_goldberg.html
-
对于那些努力改进我的答案的人(尤其是@alastair),我不相信它可以改进。我同意这是不正确的,可能很危险。我已经删除了。请参阅 James Snook 的回答,以更深入地探索这个不平凡的问题。
-
@RobNapier 我不得不说我认为保留答案是值得的,并添加了更正,但我理解您对此的看法。如果我的编辑看起来有点咄咄逼人,我深表歉意——我只是想弄清楚问题所在。
-
@alastair 一点也不;它帮助摆脱了我认为误导人们(包括我自己)的东西。我宁愿用您想添加的任何内容来改进 James Snook 的答案。 SO 上的错误,即使 标记 错误,有时也会让读者感到困惑。如果您的代表不允许您查看已删除的帖子,并且您想将以前写的内容复制到您自己的答案或 James 的答案中,我已在此处发布旧文本(也适用于任何好奇我们在谈论什么的人:D ): gist.github.com/rnapier/78502480e53f526d24f30a14032dea8d)
标签: iphone objective-c casting floating-point