有没有一种惯用的方法来四舍五入到最接近的数字倍数?
number multiple result
12.2 0.5 12.0
12.2 0.25 12.25
12.4 0.5 12.5
Run Code Online (Sandbox Code Playgroud)
ahn*_*abb 11
您可以定义一个函数:
round_step(x, step) = round(x / step) * step
Run Code Online (Sandbox Code Playgroud)
用法:
julia> round_step(12.2, 0.25)
12.25
Run Code Online (Sandbox Code Playgroud)
这样的函数实际上在 Base 内部使用,用于将数字四舍五入到特定基数中的特定位数:
julia> Base._round_step(12.2, 0.25, RoundNearest)
12.25
Run Code Online (Sandbox Code Playgroud)
但是,由于这是一个内部实现细节,因此您不应依赖此函数。该函数依次调用_round_invstep.
julia> Base._round_invstep(12.2, 4, RoundNearest)
12.25
julia> Base._round_invstep(12.4, 2, RoundNearest)
12.5
Run Code Online (Sandbox Code Playgroud)
其中执行操作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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |