首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于相同的值,CGFloat Equatable失败

对于相同的值,CGFloat Equatable失败
EN

Stack Overflow用户
提问于 2017-11-06 17:54:24
回答 2查看 212关注 0票数 1

代码语言:javascript
复制
let xCoordinate: CGFloat = 1.4
XCTAssertEqual(view.frame.origin.x, xCoordinate)

我在运行测试时遇到以下错误,如截图所示:

XCTAssertEqual failed: ("1.4") is not equal to ("1.4") -

有没有人有任何解决方案或解释?

EN

回答 2

Stack Overflow用户

发布于 2017-11-06 18:03:28

如果我没有弄错,请看一下CGFloat评估的这个选项

代码语言:javascript
复制
XCTAssertEqual(_, _, accuracy:)

在这种情况下,您可以设置精度来评估CGFloat数字,因为在不考虑准确性的情况下评估它们是不正确的。

票数 3
EN

Stack Overflow用户

发布于 2017-11-06 19:15:43

有人有什么解决方案或解释吗?

解决方案就是奥列格所建议的。解释是1.4不能表达为CGFloat。在普通小数中,您可能已经注意到,除非分数的分母只能被2或5(10的因子)整除,否则当您尝试将其转换为小数时,它将永远持续下去。例如:1/3等于0.33333333333...

这同样适用于CGFloats,除了基数是2而不是10。1.4是7/5.5。5不能被2整除,因此如果转换为二进制数,它将永远重复。实际上,是1.0110011..。

所以你的view.frame.origin.x可能是一个接近1.4的数字,但不是确切的1.4,而你的xCoordinate将是一个非常接近1.4的不同数字。这两个数字不相等,但当四舍五入到要打印的小数点后六位时,看起来像1.4。

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

https://stackoverflow.com/questions/47134112

复制
相关文章

相似问题

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