Rust中如何获取int类型的十进制位数 有没有更简便的实现方法
Rust整数十进制位数获取方案
你当前使用转字符串后统计字符数的写法可以正确得到结果,但会产生额外的字符串分配开销,对性能敏感的场景可以选择更高效的实现。
digits库适配说明
你找到的digits库的length方法完全适配你的需求,它基于数值运算统计位数,不需要执行字符串转换,性能更优。使用方式如下:
- 在Cargo.toml中添加依赖:
digits = "0.3.3" - 代码调用示例:
use digits::Digits; let num = 90; // 第一个参数指定进制为10,调用length直接返回位数 let digit_count = num.digits(10).unwrap().length(); println!("num: {}", digit_count); // 输出 2
无第三方依赖的单行实现(推荐)
如果你不想引入额外依赖,Rust 1.67及以上版本可以直接使用标准库的ilog10方法实现无类型转换的单行计算,完全符合你低转换开销、单行写法的要求:
- 统计纯数字位数(不含负号):
// 0需要单独处理,避免ilog10(0)触发panic let count = if num == 0 { 1 } else { num.abs().ilog10() as usize + 1 };
- 统计包含负号的总长度:
let count = if num == 0 { 1 } else { num.abs().ilog10() as usize + 1 + num.is_negative() as usize };
其他可选第三方库
除了digits之外,还有两个常用的可选库:
digit-count:专门用于数字位数统计的轻量库,调用逻辑最简单:let count = digit_count::count(num, 10);num-traits:Rust生态通用数值工具库,提供了跨整数类型的统一位数统计接口,适合已经在项目中引入该库的场景。
内容的提问来源于stack exchange,提问作者AthulMuralidhar
相关产品推荐
相关产品推荐

