如何四舍五入到最接近的倍数?



是否有一种习惯的方法来四舍五入到最接近的整数倍?

number   multiple    result
12.2       0.5        12.0
12.2       0.25       12.25
12.4       0.5        12.5

可以定义一个函数:

round_step(x, step) = round(x / step) * step

用法:

julia> round_step(12.2, 0.25)
12.25

这样的函数实际上是在Base内部使用的,用于将数字四舍五入到特定进制中的特定位数:

julia> Base._round_step(12.2, 0.25, RoundNearest)
12.25

然而,由于这是一个内部实现细节,你不应该依赖于这个函数。该函数依次调用_round_invstep

julia> Base._round_invstep(12.2, 4, RoundNearest)
12.25
julia> Base._round_invstep(12.4, 2, RoundNearest)
12.5

执行round(x * invstep, r) / invstep操作。

因为你的例子恰好对应于以4和2为基数的0.1,你也可以直接使用round来处理这些特殊情况:

julia> round(12.2; base=2, digits=1)
12.0
julia> round(12.2; base=4, digits=1)
12.25
julia> round(12.4; base=2, digits=1)
12.5

相关内容

  • 没有找到相关文章