四舍五入到一定数量

Round up to certain number

假设我有一个数字列表:[0.13,0.53,2.83] 我希望这些数字向上舍入到最接近的 x=0.5(或 x 的任何其他值) 给定 x=0.5,此列表将变为:[0.5,1,3].

我用 % 尝试了一些方法,但我尝试的方法似乎都不起作用。

有什么想法吗?

哈利

编辑:其他帖子想知道最接近的值,所以 1.6 会变成 1.5,但在我的例子中它应该变成 2

你需要math.ceil:

import math

numbers = [0.13, 0.53, 2.83]
x = 0.5

def roundup(numbers, x):
    return [math.ceil(number / x) * x for number in numbers]

roundup(numbers, x)
# returns [0.5, 1.0, 3.0]

这里已经回答了这个问题: How do you round UP a number in Python?

关于更改列表中的多个元素,您将需要使用 for 循环: Looping over a list in Python

如果某个函数适合您的需要,那么下面的函数适用于正数。 "x" 是您要舍入的数字,thresh 是用于向上舍入的值(介于 0 和 1 之间)。

def rounding_function(x, thresh):
    if x == int(x):
        return x
    else:
        float_part = x-int(x)
        if float_part<=thresh:
            return int(x) + thresh
        else:
            return int(x) + 1

结果如下:

l = [0, 0.13,0.53, 0.61, 2.83, 3]

print([rounding_function(x, 0.5) for x in l]) # [0, 0.5, 1, 1, 3, 3]
print([rounding_function(x, 0.6) for x in l]) # [0, 0.6, 0.6, 1, 3, 3]

这是一个通用的解决方案。 (不要忘记处理所有 "weird input";例如负数 incr、负数 x 等)

import math

def increment_ceil(x, incr=1):
    """ 
    return the smallest float greater than or equal to x
    that is divisible by incr
    """
    if incr == 0:
        return float(x)
    else:
        return float(math.ceil(x / incr) * incr)