关于浮点:如何使用python将39.54484700000000更改为39.54

how to change 39.54484700000000 to 39.54 and using python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
python limiting floats to two decimal points

我想使用python将39.54484700000000设置为39.54

如何得到它,

谢谢


如果要更改实际值,请按照eli的建议使用round。但是,对于许多值和某些版本的python,这不会导致用字符串"39.54"表示。如果您只想将其四舍五入以生成一个字符串来显示给用户,则可以这样做

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

或者在更新版本的python中

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

相关文档:字符串格式化操作,内置函数:round


如果使用的是十进制,则可以使用量化方法:

1
2
3
4
5
6
In [24]: q = Decimal('0.00')

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

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


埃多克斯1〔0〕怎么样

1
2
3
4
>>> import decimal
>>> d=decimal.Decimal("39.54484700000000")
>>> round(d,2)
39.54

eli提到使用round函数——根据您的需求,您可能希望返回一个十进制对象。

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

使用decimal对象可以指定要跟踪的精确小数位数,因此避免以表示为39.539999999999999的浮点数字结尾。具体来说,如果您正在进行财务计算,几乎总是建议您远离浮点数字。

但是,您不能将浮点直接转换为小数(浮点不精确,而python无法猜测您希望如何对其进行舍入),因此我几乎总是先将其转换为一个舍入字符串表示法(即"%.2f" % float_val--%.2f,意思是只显示两个小数,然后从中创建一个小数。


1
2
>>> round(39.54484700000000, 2)
39.54

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


使用round

Return the floating point value x
rounded to n digits after the decimal
point. If n is omitted, it defaults to
zero. The result is a floating point
number.
Values are rounded to the closest
multiple of 10 to the power minus n;
if two multiples are equally close,
rounding is done away from 0

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

请注意,由于39.54在我的PC(x86)上不完全可重复使用浮点,因此结果是epsilon关闭。但这没什么区别(这是一个完全不同的问题,有很多这样的问题和答案)。如果将其正确转换为字符串,您将看到所期望的:

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