栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在字典中双打的打印方式不同?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在字典中双打的打印方式不同?

如注释中已经提到的,a

Double
不能
1.1
精确存储值。Swift根据IEEE
754
标准使用(像许多其他语言一样)二进制浮点数。

最接近的数目

1.1
可以被表示为
Double

1.100000000000000088817841970012523233890533447265625

与最接近的数目

2.3
可以被表示,作为一个
Double

2.29999999999999982236431605997495353221893310546875

打印 该数字表示将其再次转换为带有小数表示的字符串,并且以不同的精度完成此操作,具体取决于您如何打印该数字。

从源代码HashedCollections.swift.gyb一个可以看到

description
的方法
Dictionary
使用
debugPrint()
两个键和值,和
debugPrint(x)
打印的值
x.debugDescription

(如果
x
符合
CustomDebugStringConvertible
)。

另一方面,如果符合则

print(x)
呼叫。
x.description``x``CustomStringConvertible

所以,你看到的是输出不同

description
debugDescription
Double

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

从Swift源代码中,可以看到两者都使用Stubs.cpp中的

swift_floatingPointToString()

函数,并且参数分别设置为和。此参数控制数字到字符串转换的精度:
Debug``false``true

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

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

  • digits10
    –可以不改变地表示的小数位数,
  • max_digits10
    –区分此类型的所有值所必需的小数位数。

因此,

description
创建一个具有较少十进制数字的字符串。该字符串可以转换为a
Double
并返回给相同结果的字符串。
debugDescription
创建具有更多十进制数字的字符串,以便任何两个不同的浮点值将产生不同的输出。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号