说我有一个数字列表:[0.13,0.53,2.83]
我希望这些数字四舍五入到最接近的x = 0.5(或x的任何其他值)
给定x = 0.5:[0.5,1,3]
,此列表将变为。
我尝试了一些用%进行的操作,但是我尝试的方法似乎都不起作用。
有什么想法吗?
哈里
编辑:其他帖子想知道最接近的值,所以1.6将变为1.5,但在我的情况下,它将变为2
答案 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)