如何将39.54484700000000更改为39.54并使用python

时间:2011-03-05 06:51:57

标签: python floating-point

  

可能重复:
  python limiting floats to two decimal points

我想使用python将39.54484700000000设置为39.54

如何获得它,

感谢

6 个答案:

答案 0 :(得分:8)

如果您想更改实际值,请使用Eli建议的round。但是对于许多值和某些版本的Python,这不会被表示为字符串“39.54”。如果您想将其四舍五入以生成要显示给用户的字符串,则可以执行

>>> print "%.2f" % (39.54484700000000)
39.54

或更新版本的Python

>>> print("{:.2f}".format(39.54484700000000))
39.54

相关文档:String Formatting OperationsBuilt-in Functions: round

答案 1 :(得分:3)

如果您使用的是十进制:

,则可以使用quantize方法
In [24]: q = Decimal('0.00')

In [25]: d = Decimal("115.79341800000000")

In [26]: d.quantize(q)
Out[26]: Decimal("115.79")

答案 2 :(得分:2)

Eli提到使用圆函数 - 根据您的要求,您可能希望返回一个Decimal对象。

>>> from decimal import Decimal
>>> float_val = 39.54484700000000
>>> decimal_val = Decimal("%.2f" % float_val)
>>> print decimal_val
39.54

使用Decimal对象可以指定要跟踪的确切小数位数,这样就可以避免使用表示为39.539999999999999的浮点数。具体来说,如果您正在进行财务计算,则几乎总是建议您远离浮点数。

你不能直接将浮点数转换为Decimals(浮点数不精确,Python无法猜测你想要它们如何舍入),所以我几乎总是先将它们转换为圆形字符串表示(即{ {1}} - "%.2f" % float_val表示只显示两位小数,然后创建一个小数。

答案 3 :(得分:2)

round

怎么样?
>>> import decimal
>>> d=decimal.Decimal("39.54484700000000")
>>> round(d,2)
39.54

答案 4 :(得分:1)

使用round

  

返回浮点值x   小数点后四舍五入到n位数   点。如果省略n,则默认为   零。结果是一个浮点   数。   值四舍五入到最接近的值   功率减去n的10的倍数;   如果两个倍数相等,   舍入远离0

>>> round(39.544847, 2)
39.539999999999999
>>> 

请注意,由于我的PC(x86)上的浮点数不能完全取消39.54,因此结果是关闭了epsilon。但这没有任何区别(并且是一个完全不同的问题,有许多SO问题和答案)。如果将其正确转换为字符串,您将看到您的期望:

>>> "%.2f" % round(39.544847, 2)
'39.54'

答案 5 :(得分:1)

>>> round(39.54484700000000, 2)
39.54

但请注意,结果实际上不是39.54,而是39.53999999999999914734871708787977695465087890625。