python2.4.3:格式错误?

Ant*_*ong 4 python floating-point python-2.4

这是一个例子:

>>> "%.2f" % 0.355
'0.35'
>>> "%.2f" % (float('0.00355') *100)
'0.36'
Run Code Online (Sandbox Code Playgroud)

他们为什么给出不同的结果

aar*_*ing 6

这不是格式错误.这只是浮点运算.查看格式命令下面的值:

In [18]: float('0.00355')
Out[18]: 0.0035500000000000002

In [19]: float('0.00355')*100
Out[19]: 0.35500000000000004

In [20]: 0.355
Out[20]: 0.35499999999999998
Run Code Online (Sandbox Code Playgroud)

这两个表达式创建不同的值.

我不知道它是否在2.4中可用,但您可以使用十进制模块来完成这项工作:

>>> import decimal
>>> "%.2f" % (decimal.Decimal('0.00355')*100)
'0.35'
Run Code Online (Sandbox Code Playgroud)

decimal模块将浮点数视为字符串以保持任意精度.

  • 实际上,使用`%`进行浮点格式化而不是截断; 在2.7之前的Python版本中,它直接从相应的C`sprintf`行为中获取此行为.在更新的Python版本中,转换是在Python内核中实现的,但仍然具有相同的"舍入到最接近"行为. (2认同)