四舍五入到一定数量
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)
假设我有一个数字列表:[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)