You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何获取int类型的十进制位数 有没有更简便的实现方法

Rust整数十进制位数获取方案

你当前使用转字符串后统计字符数的写法可以正确得到结果,但会产生额外的字符串分配开销,对性能敏感的场景可以选择更高效的实现。

digits库适配说明

你找到的digits库的length方法完全适配你的需求,它基于数值运算统计位数,不需要执行字符串转换,性能更优。使用方式如下:

  1. 在Cargo.toml中添加依赖:digits = "0.3.3"
  2. 代码调用示例:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:39:03