【问题标题】:CGFloat Equatable failed for same valuesCGFloat Equatable 对于相同的值失败
【发布时间】:2018-04-18 10:46:19
【问题描述】:

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

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

有人有什么解决办法或解释吗?

【问题讨论】:

    标签: ios swift xctest xctestcase


    【解决方案1】:

    有人有什么解决办法或解释吗?

    解决方案是 Oleg 所建议的。解释是 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。

    【讨论】:

      【解决方案2】:

      如果我没有犯错,请查看CGFloat 评估的这个选项:

      XCTAssertEqual(_, _, accuracy:)
      

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

      【讨论】:

      • 它已被弃用。我们可以改用XCTAssertEqual(_, _, accuracy:)
      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多