是否有一种习惯的方法来四舍五入到最接近的整数倍?
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