swift – 为什么双字印刷字体不同?

swift – 为什么双字印刷字体不同?,第1张

概述let dic : [Double : Double] = [1.1 : 2.3, 2.3 : 1.1, 1.2 : 2.3]print(dic)// [2.2999999999999998: 1.1000000000000001, 1.2: 2.2999999999999998, 1.1000000000000001: 2.2999999999999998]let double :
let dic : [Double : Double] = [1.1 : 2.3,2.3 : 1.1,1.2 : 2.3]print(dic)// [2.2999999999999998: 1.1000000000000001,1.2: 2.2999999999999998,1.1000000000000001: 2.2999999999999998]let double : Double = 2.3let anotherdouble : Double = 1.1print(double) // 2.3print(anotherdouble) // 1.1

我不明白为什么编译器从字典中打印值不同?
我在Swift 3,Xcode 8.这是一个BUG或一些奇怪的方法优化的东西或东西?@H_403_5@

编辑@H_403_5@

更奇怪的是:@H_403_5@

有些价值观过去了,有的下降了,有些留下来吧! 1.1小于1.1000000000000001,而2.3是2.2999999999999998以上,1.2只是1.2@H_403_5@ 如评论中已经提到的,Double不能存储
价值1.1正好. Swift使用(像许多其他语言)
二进制浮点数按照 IEEE 754
标准.

可以表示为Double的最接近的数字是1.1@H_403_5@

1.100000000000000088817841970012523233890533447265625

最接近的数字可以表示为Double@H_403_5@

2.29999999999999982236431605997495353221893310546875

打印该数字意味着它被转换为一个字符串
再次使用十进制表示法,并用不同的方法完成
精度,取决于打印数字的方式.@H_403_5@

从HashedCollections.swift.gyb的源代码可以看出,描述方法
字典对于键和值都使用deBUGPrint()
而deBUGPrint(x)打印x.deBUGDescription的值
(如果x符合CustomDeBUGStringConvertible).@H_403_5@

另一方面,如果x符合,print(x)将调用x.description
到customstringconvertible.@H_403_5@

所以你看到的是不同的描述输出
和deBUG的描述:@H_403_5@

print(1.1.description) // 1.1print(1.1.deBUGDescription) // 1.1000000000000001

从Swift源代码可以看出
两者都使用swift_floatingPointToString()
功能在Stubs.cpp中,DeBUG参数分别设置为false和true.
此参数控制数字到字符串转换的精度:@H_403_5@

int Precision = std::numeric_limits<T>::digits10;if (DeBUG) {  Precision = std::numeric_limits<T>::max_digits10;}

有关这些常量的含义,请参见std::numeric_limits:@H_403_5@

> digits10 – 可以表示没有变化的十进制数字数,
> max_digits10 – 区分此类型的所有值所需的十进制数字数.@H_403_5@

因此,描述创建一个小数位数少的字符串.那字符串可以转换为双精度并返回一个字符串给出相同的结果.deBUGDescription创建一个具有更多十进制数字的字符串,这样就可以了任何两个不同的浮点值将产生不同的输出.@H_403_5@ 总结

以上是内存溢出为你收集整理的swift – 为什么双字印刷字体不同?全部内容,希望文章能够帮你解决swift – 为什么双字印刷字体不同?所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1027243.html

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

发表评论

登录后才能评论

评论列表(0条)

保存