Swift:双转换不一致.如何正确比较双打?
发布时间:2020-12-14 05:42:59 所属栏目:百科 来源:网络整理
导读:我有一个非常简单的功能,可将温度从?C转换为?K. func convertKelvinToCelsius(temp:Double) -Double { return temp - 273.15} 我有一个单元测试来驱动这个功能.这就是问题所在: func testKelvinToCelsius(){ var check1 = conv.convertKelvinToCelsius(200.
我有一个非常简单的功能,可将温度从?C转换为?K.
func convertKelvinToCelsius(temp:Double) ->Double { return temp - 273.15 } 我有一个单元测试来驱动这个功能.这就是问题所在: func testKelvinToCelsius(){ var check1 = conv.convertKelvinToCelsius(200.00) // -73.149999999999977 var check2 = 200.00 - 273.15 // -73.149999999999977 var check3 = Double(-73.15) // -73.150000000000006 //Passes XCTAssert(conv.convertKelvinToCelsius(200.00).description == Double(-73.15).description,"Shoud convert from celsius kelvin") //Fails XCTAssert(conv.convertKelvinToCelsius(200.00) == Double(-73.15),"Shoud convert from celsius kelvin") } 当你添加一个断点并检查check1,check2和check3的值时,它们非常有趣: check1 Double -73.149999999999977 check2 Double -73.149999999999977 check3 Double -73.150000000000006 问题: >为什么Swift会为check1 / check2和check3返回不同的值 重现: 只需在你的操场上输入200 – 273.15 == -73.15并观察它是假的!!
这是浮点值的预期行为.
They cannot be 100% accurately represented.
您可以使用XCTAssertEqualWithAccuracy函数来断言浮点值在彼此的给定范围内. println为所有打印相同值的原因是因为它在内部将它们舍入为两位小数(我假设). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读