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

使用Python 2.7如何将我的数字四舍五入到小数点后两位而不是十位左右?

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

使用内置函数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' 

或新风格的string格式:

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

或旧式string格式化:

 >>> "%.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. 

既然你在谈论财务数据,你不想使用浮点algorithm。 你最好用十进制。

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

使用新式format()文本输出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') 

在不同的交易中进行其他types的四舍五入也是常见的:

 >>> 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') 

请记住,如果你模拟回报结果,你可能不得不在每个利息期进行四舍五入,因为你不能支付/收取分数,也不能获得分数以上的利息。 对于模拟来说,由于内在的不确定性,使用浮点很常见,但是如果这样做的话,一定要记住错误在那里。 因此,即使是固定利息投资也可能因此而有所不同。

你也可以使用str.format()

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

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

我有一个函数将一个整数转换为一个浮点数。

 ... return float(115 * 0.01) 

大部分时间工作,但有时它会返回像1.1500000000000001

所以我改变了我的function,像这样返回…

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

那会返回1.15 。 不是'1.15'1.1500000000000001 (返回一个浮点数,而不是一个string)

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

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

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

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

但是我不得不说:在使用财务价值时不要使用round或format。

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

你可以使用圆形(2.735)和圆形(2.725)

请用

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

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

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

可能不是超高效,但简单,工作:)

凑到下一个0.05,我会这样做:

 def roundup(x): return round(int(math.ceil(x / 0.05)) * 0.05,2)