Python中的舍入规则

0 投票
6 回答
2878 浏览
提问于 2025-04-16 16:37

我想在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。它内置了多种复杂的舍入规则,经过调试,可以直接使用。

http://docs.python.org/library/decimal.html

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

撰写回答