Python中的舍入规则
我想在Python中按照一些不同的规则进行四舍五入。比如说:
10.666 = 10.6
10.667 = 10.7
也就是说,6的时候向下取整,7的时候向上取整。
有没有办法可以用Python做到这一点呢?
6 个回答
1
如果你想要的效果是:当需要四舍五入的部分大于或等于最大值的⅔时,就向上取整;否则就向下取整。那么我觉得你可以使用普通的 round()
函数,不过在使用之前,先减去你想要精度的⅙。
def my_round(n):
return round(n - .1/6, 1)
>>> print(my_round(10.666))
10.6
>>> print(my_round(10.667))
10.7
6
使用 decimal.Decimal
。它内置了多种复杂的舍入规则,经过调试,可以直接使用。
1
我不太确定你想要的四舍五入规则是什么样的。你能详细说明一下你的四舍五入规则吗?
所以我不能说这个是完全正确的,但我觉得你可以把它当作你实现的一个参考。
def cround(v):
"""
Round number down at 1st decimal place when the digit in the
3rd decimal place is <= 6, up when >= 7
"""
v *= 10
q = str(round(v, 2))
if int(q[-1]) <= 6:
return int(v) / 10.0
return round(v) / 10.0
NUMS = [
10.666, 10.667, 0.1, 1.0, 10.11, 10.22, 10.06, 10.006, 11.6, 11.7,
10.666123, 10.667123, 10.888, 10.999 ]
for num in NUMS:
print str(num).ljust(11), cround(num)
输出:
10.666 10.6
10.667 10.7
0.1 0.1
1.0 1.0
10.11 10.1
10.22 10.2
10.06 10.0
10.006 10.0
11.6 11.6
11.7 11.7
10.666123 10.6
10.667123 10.7
10.888 10.9
10.999 11.0