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

浮点数和字符串转换的奇怪行为

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

浮点数和字符串转换的奇怪行为

关键的要求

repr
是它应该往返。也就是说,在所有情况下
eval(repr(f)) == f
都应给予
True

在Python
2.x(2.7之前的版本)中,它

repr
通过
printf
对format进行格式化
%.17g
并舍弃尾随零来工作。IEEE-754保证这是正确的(对于64位浮点数)。从2.7和3.1开始,Python使用了一种更智能的算法,该算法可以在某些情况下找到较短的表示形式,
%.17g
从而给出不必要的非零终端数字或终端数字9。请参阅3.1的新功能?并发行1580。

即使在Python 2.7下,也会

repr(0.1 * 0.1)
给出
"0.010000000000000002"
。这是因为
0.1 * 0.1 ==0.01
False
在IEEE-754解析和算法;
也就是说,与之最接近的64位浮点值与
0.1
自身相乘时,将得出一个64位的浮点值,该值不是与之最接近的64位浮点值
0.01

>>> 0.1.hex()'0x1.999999999999ap-4'>>> (0.1 * 0.1).hex()'0x1.47ae147ae147cp-7'>>> 0.01.hex()'0x1.47ae147ae147bp-7'      ^ 1 ulp difference

repr
和之间
str
(2.7 /
3.1之前的版本)的区别在于,
str
格式具有12位小数而不是17位,这是不可四舍五入的,但是在许多情况下产生的可读性更高。



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

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

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