关键的要求
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位,这是不可四舍五入的,但是在许多情况下产生的可读性更高。



