对于标量x
舍入到最接近值y
的情况,需要以下行为。考虑以下示例:
>>> x = 1.2323789374
>>> z = round_up_to_nearest(x, 0.1)
>>> print(z)
1.3
或
>>> x = [0.00203, 0.5205, 0.78, 1.2323789374]
>>> z = round_up_to_nearest(x, 0.2)
>>> print(z)
[0.2, 0.6, 0.8, 1.4]
令我惊讶的是,目前尚无此功能,因此我提出了以下建议:
def round_up_to_nearest(x, y=0.1):
"""Round scalar x up to float y as nearest"""
return np.ceil(x / y) * y
这在浮点精度方面存在问题,例如在以下情况下:
>>> round_up_to_nearest(1.62938412634, 0.1)
1.7000000000000002
所需输出为1.7
。
为了克服这个问题,我想到了将输出舍入到d.p的数量。在y
中指定如下:
def round_up_to_nearest(x, y=0.1):
"""Round scalar x up to float y as nearest"""
return np.round(np.ceil(x / y) * y, decimals=len(str(y).split('.')[1]))
然后返回所需的输出:
>>> round_up_to_nearest(1.62938412634, 0.1)
1.7
但是,鉴于我需要应用此方法数百万次,因此该解决方案似乎过于复杂,不易读取且性能不佳。有没有更优化的解决方案?