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

Rust简单除法计算结果错误,与Python/C/C++结果不一致问题求助

问题原因

这个现象不是Rust的逻辑错误,是不同语言的整数除法规则差异导致的:

  • Rust中两个整数类型的值执行/运算时,默认采用截断整数除法,会直接丢弃小数部分,仅保留整数结果。你代码中的1569494、3915755均为整数类型,1569494 / 3915755的实际值约为0.4008,截断小数后得到整数0,再乘以100最终结果就是0。
  • Python3的/运算符默认返回浮点数,会完整保留小数部分参与运算,因此能得到符合预期的浮点结果。
  • 你所说的C/C中得到正确结果,是因为你的C/C代码大概率将变量定义为了浮点类型,或者调整了运算顺序先做乘法再做除法;如果用两个int类型变量按你给出的Rust代码逻辑编写C/C++代码,也会得到0的结果。
解决方法

方法1:转换为浮点类型运算

先将参与运算的整数转换为浮点类型,再执行除法运算,示例代码:

// 保留浮点精度
let mem_percent_used: f64 = (1569494 as f64 / 3915755 as f64) * 100.0;
// 如果需要取整得到u64类型的40,可搭配round()、floor()等方法
let mem_percent_used_int: u64 = mem_percent_used.round() as u64;

println!("{}", mem_percent_used); // 输出40.08151684668729
println!("{}", mem_percent_used_int); // 输出40

方法2:调整运算顺序,纯整数运算实现

如果不需要浮点精度,且可保证运算过程中不会超出整数类型的取值范围,可以将乘法调整到除法之前执行,避免小数部分被提前截断:

let mem_percent_used: u64 = (1569494 * 100) / 3915755;
println!("{}", mem_percent_used); // 直接输出40

内容的提问来源于stack exchange,提问作者wassomeuser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:02