Julia 1.6中如何获取浮点数的数量级?
Julia 1.6 计算浮点数数量级的实现方法
基础实现(仅使用标准库)
你需要的OrderOfMagnitude功能可以直接通过对数运算实现,代码如下:
function OrderOfMagnitude(x::Real) # 处理输入为0的边界情况,可根据需求调整返回值 iszero(x) && error("输入不能为0") return floor(Int, log10(abs(x))) end
测试效果完全匹配你的需求:
OrderOfMagnitude(1000)→ 3OrderOfMagnitude(0.001)→ -3OrderOfMagnitude(-12345)→ 4OrderOfMagnitude(999)→ 2
变体功能实现
如果需要取最接近的数量级而非向下取整,把floor替换为round即可:
OrderOfMagnitude(x::Real) = iszero(x) ? error("输入不能为0") : round(Int, log10(abs(x)))
此时OrderOfMagnitude(999)会返回3,符合四舍五入到最近数量级的需求。
注意事项
- 以上实现对整数、浮点数均适用
- 通用场景下对数运算的性能已经足够,不需要额外引入第三方包
内容的提问来源于stack exchange,提问作者Fabrizio Leone
相关产品推荐
相关产品推荐

