python 2.7强制向上舍入2位小数

时间:2014-01-20 22:11:36

标签: python floating-point decimal rounding

我正试图强制浮点数向上舍入到小数点后第二位。我知道这不是最好的做法,但这正是我正在努力的程序所需要的。例如:

100.00 = 100.00

100.001 = 100.01

100.009 = 100.01

我已经非常接近我需要的结果math.ceil和我在另一篇文章中读到的提示,但是我遇到了一个问题,如果输入数字已经完全在2位小数处结束,那么就会不必要地向上舍入。这是一个例子:

import math

taxpcnt = 1.12
roomsubtotal = 699.00

roomttl = math.ceil(taxpcnt * roomsubtotal * 100) / 100

print roomttl

我认为这将返回782.88,因为699 * 1.12正好是782.88,但它返回782.89。 Weirder如果我'打印taxpcnt * roomsubtotal',我得到782.88。如果我将代码更改为:

roomttl = math.ceil(782.88 * 100) / 100

我得到了正确的价值。但是有些原因,它们一起计算得不对。

有关如何正确获得我想要实现的目标的任何提示?

编辑:我想我已经修补了一个解决方案:

import math

taxpcnt = 1.12
roomsubtotal = 699.00

rate = "%.2f" % (taxpcnt * roomsubtotal * 100)
rate = float(rate)

roomttl = math.ceil(rate) / 100

不确定这是否是最佳方法,但至少它似乎有效。

1 个答案:

答案 0 :(得分:1)

欢迎来到浮点世界。阅读this以了解正在发生的事情。

计算机无法准确表示699 * 1.12的结果,因此舍入的结果不正确。

>>> 699 * 1.12
782.8800000000001

如果您只关心两位小数,请考虑使用其他类型,例如Decimal