1

在此处输入图像描述

let xCoordinate: CGFloat = 1.4
XCTAssertEqual(view.frame.origin.x, xCoordinate)

运行测试时出现以下错误,如屏幕截图所示:
XCTAssertEqual failed: ("1.4") is not equal to ("1.4") -

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

4

2 回答 2

3

如果我没有犯错,请查看以下评估选项CGFloat

XCTAssertEqual(_, _, accuracy:)

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

于 2017-11-06T10:03:27.980 回答
2

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

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

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

因此,您view.frame.origin.x可能是一个接近 1.4 但不完全是 1.4 的数字,您xCoordinate将是一个非常接近 1.4 的不同数字。这两个数字比较不相等,但是当四舍五入到要打印的小数点后六位时,看起来像 1.4。

于 2017-11-06T11:15:42.943 回答