四舍五入到一定数量

时间:2019-09-06 14:37:13

标签: python rounding

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

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

有什么想法吗?

哈里

编辑:其他帖子想知道最接近的值,所以1.6将变为1.5,但在我的情况下,它将变为2

4 个答案:

答案 0 :(得分:4)

您需要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]

答案 1 :(得分:0)

此问题已在此处回答: How do you round UP a number in Python?

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

答案 2 :(得分:0)

如果某个函数适合您的需要,则该波纹管可用于正数。 “ x”是您要四舍五入的数字,脱粒是用于四舍五入的值(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]

答案 3 :(得分:0)

这是一个常规解决方案。 (不要忘记处理所有“怪异的输入”;例如,负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)