在Python 2.7中舍入到小数点后两位?

时间:2013-07-04 12:54:52

标签: python python-2.7 rounding

使用Python 2.7如何将我的数字舍入到两个小数位而不是它给出的10左右呢?

print "financial return of outcome 1 =","$"+str(out1)

9 个答案:

答案 0 :(得分:188)

使用内置函数round()

>>> round(1.2345,2)
1.23
>>> round(1.5145,2)
1.51
>>> round(1.679,2)
1.68

或内置函数format()

>>> format(1.2345, '.2f')
'1.23'
>>> format(1.679, '.2f')
'1.68'

或新样式字符串格式:

>>> "{:.2f}".format(1.2345)
'1.23
>>> "{:.2f}".format(1.679)
'1.68'

或旧式字符串格式:

>>> "%.2f" % (1.679)
'1.68'

round上的帮助:

>>> print round.__doc__
round(number[, ndigits]) -> floating point number

Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number.  Precision may be negative.

答案 1 :(得分:42)

由于您正在讨论财务数字,因此不想使用浮点运算。你最好使用Decimal。

>>> from decimal import Decimal
>>> Decimal("33.505")
Decimal('33.505')

使用新式format()进行文本输出格式化(默认为半舍入舍入):

>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))
financial return of outcome 1 = 33.50
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))
financial return of outcome 1 = 33.52

查看由浮点不精确引起的舍入差异:

>>> round(33.505, 2)
33.51
>>> round(Decimal("33.505"), 2)  # This converts back to float (wrong)
33.51
>>> Decimal(33.505)  # Don't init Decimal from floating-point
Decimal('33.50500000000000255795384873636066913604736328125')

圆整财务价值的正确方法

>>> Decimal("33.505").quantize(Decimal("0.01"))  # Half-even rounding by default
Decimal('33.50')

在不同的交易中进行其他类型的舍入也很常见:

>>> import decimal
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)
Decimal('33.50')
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
Decimal('33.51')

请记住,如果您正在模拟退货结果,您可能必须在每个利息期间进行回合,因为您无法支付/接收分数,也不会获得超过分数的利息。对于模拟,由于固有的不确定性而使用浮点是很常见的,但如果这样做,请始终记住错误存在。因此,即使固定利息投资也可能因此而有所不同。

答案 2 :(得分:5)

您也可以使用str.format()

>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23

答案 3 :(得分:4)

使用便士/整数时。您将遇到115(如1.15美元)和其他数字的问题。

我有一个将Integer转换为Float的函数。

...
return float(115 * 0.01)

大部分时间都有效,但有时它会返回类似1.1500000000000001的内容。

所以我改变了我的功能,就像这样......

...
return float(format(115 * 0.01, '.2f'))

,这将返回1.15。不是'1.15'1.1500000000000001(返回浮点数,而不是字符串)

我主要是张贴这个,所以我记得在这种情况下我做了什么,因为这是谷歌的第一个结果。

答案 4 :(得分:2)

我认为最好的是使用format()函数:

>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f'))
// Should print: financial return of outcome 1 = $ 752.60

但我不得不说:在处理财务价值时,不要使用回合或格式。

答案 5 :(得分:2)

当我们使用round()函数时,它将不会给出正确的值。

你可以用它来检查, 圆形(2.735)和圆形(2.725)

请使用

import math
num = input('Enter a number')
print(math.ceil(num*100)/100)

答案 6 :(得分:1)

print "financial return of outcome 1 = $%.2f" % (out1)

答案 7 :(得分:0)

一个相当简单的解决方法是首先将float转换为字符串,选择前四个数字的子字符串,最后将子字符串转换回float。 例如:

>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1

可能效率不高但很简单且有效:)

答案 8 :(得分:0)

四舍五入到下一个0.05,我会这样做:

s3