Python将标量舍入到最接近的非整数值

时间:2019-05-07 08:05:42

标签: python numpy math floating-point

对于标量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

但是,鉴于我需要应用此方法数百万次,因此该解决方案似乎过于复杂,不易读取且性能不佳。有没有更优化的解决方案?

0 个答案:

没有答案