
let xCoordinate: CGFloat = 1.4
XCTAssertEqual(view.frame.origin.x, xCoordinate)我在运行测试时遇到以下错误,如截图所示:
XCTAssertEqual failed: ("1.4") is not equal to ("1.4") -
有没有人有任何解决方案或解释?
发布于 2017-11-06 18:03:28
如果我没有弄错,请看一下CGFloat评估的这个选项
XCTAssertEqual(_, _, accuracy:)在这种情况下,您可以设置精度来评估CGFloat数字,因为在不考虑准确性的情况下评估它们是不正确的。
发布于 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。
https://stackoverflow.com/questions/47134112
复制相似问题