Swift:双转换不一致.如何正确比较双打?

Swift:双转换不一致.如何正确比较双打?,第1张

概述我有一个非常简单的功能,可将温度从˚C转换为˚K. func convertKelvinToCelsius(temp:Double) ->Double { return temp - 273.15} 我有一个单元测试来驱动这个功能.这就是问题所在: func testKelvinToCelsius(){ var check1 = conv.convertK 我有一个非常简单的功能,可将温度从˚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.149999999999977check2  Double  -73.149999999999977check3  Double  -73.150000000000006

问题:

>为什么Swift会为check1 / check2和check3返回不同的值
>我怎样才能通过第二次测试,因为写它就像我测试1一样.为什么我必须将双打转换为字符串才能比较它们?
>最后,当我打印check1,check2和check3时,它们都打印为’-73.15′.为什么?为什么不准确打印,而不是混淆程序员!?

重现:

只需在你的 *** 场上输入200 – 273.15 == -73.15并观察它是假的!!

这是浮点值的预期行为. They cannot be 100% accurately represented.

您可以使用XCTAssertEqualWithAccuracy函数来断言浮点值在彼此的给定范围内.

println为所有打印相同值的原因是因为它在内部将它们舍入为两位小数(我假设).

总结

以上是内存溢出为你收集整理的Swift:双转换不一致.如何正确比较双打?全部内容,希望文章能够帮你解决Swift:双转换不一致.如何正确比较双打?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1046736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存