C_Z*_*_Z_ 21 python string floating-point
将a转换float为a时str,我可以指定要显示的小数点数
'%.6f' % 0.1
> '0.100000'
'%.6f' % .12345678901234567890
> '0.123457'
Run Code Online (Sandbox Code Playgroud)
但是,当简单地调用str一个float在Python 2.7,它似乎默认为12小数点最多
str(0.1)
>'0.1'
str(.12345678901234567890)
>'0.123456789012'
Run Code Online (Sandbox Code Playgroud)
这个最大小数点数定义/记录在哪里?我能以编程方式获取此号码吗?
显示的小数位数差异很大,并且无法预测纯Python中显示的小数位数.有些库numpy允许您设置输出的精度.
该链接的相关部分讨论了Python如何选择显示浮点数.
Python仅将十进制近似值打印到机器存储的二进制近似值的真实十进制值
Python通过显示舍入值来保持可管理的位数
现在,这里有可能重叠:
有趣的是,有许多不同的十进制数,它们具有相同的最接近的近似二进制分数
用于选择要显示的十进制值的方法在Python 3.1中已更改(但最后一句意味着这可能是一个实现细节).
例如,数字0.1和0.10000000000000001都近似为3602879701896397/2**55.由于所有这些十进制值共享相同的近似值,因此可以显示其中任何一个,同时仍保留不变eval(repr(x))= = x
从历史上看,Python提示符和内置的repr()函数将选择具有17位有效数字的0.10000000000000001.从Python 3.1开始,Python(在大多数系统上)现在能够选择最短的这些并且只显示0.1.