在几乎每个系统上,Python都可以为您提供人类可读的浮点的简短表示形式,而不是17位的机器精度:
Python 3.3.0 (default, Dec 20 2014, 13:28:01)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1
0.1
>>> import sys; sys.float_repr_style
'short'
Run Code Online (Sandbox Code Playgroud)
在ARM926EJ-S上,您没有简短的表示形式:
Python 3.3.0 (default, Jun 3 2014, 12:11:19)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1
0.10000000000000001
>>> import sys; sys.float_repr_style
'legacy'
Run Code Online (Sandbox Code Playgroud)
对于大多数系统,Python 2.7显然将此简短表示形式添加到repr():
现在,在大多数平台上都可以正确舍入浮点数和字符串之间的转换。这些转换发生在许多不同的地方:str()代表浮点数和复数;浮动和复杂构造函数;数字格式;使用marshal,pickle和json模块对浮点数和复数进行序列化和反序列化;在Python代码中解析float和虚数文字;和十进制到浮点转换。
与此相关的是,浮点数x的repr()现在基于最短的十进制字符串返回一个结果,该字符串保证在正确的舍入(使用“从一半到一半到四舍五入的舍入模式”下)可以四舍五入为x。以前,它根据x舍入到17个十进制数字给出了一个字符串。
负责此改进的舍入库可在Windows和使用gcc,icc或suncc编译器的Unix平台上工作。可能在少数平台上无法保证此代码的正确操作,因此在此类系统上不使用该代码。您可以通过检查sys.float_repr_style来确定正在使用的代码,如果正在使用新代码,则将简短显示,而如果未使用,则将使用旧代码。
他们说某些平台不能保证( dtoa.c …