You need to enable JavaScript to run this app. Rust中u128与u64相乘结果恒为0的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Rust中u128与u64相乘结果恒为0的问题咨询

问题原因

你当前代码的异常是由Rust整数除法的截断特性导致的:两个整数执行除法运算时会默认向零截断,只要ending_time - starting_time的取值小于duration,(ending_time - starting_time)/duration的结果就会直接被截断为0,因此无论amount取值多大,最终相乘结果都会是0。

修复方案

调整运算顺序,先执行乘法再执行除法,同时统一将时间相关参数转换为u128类型避免溢出,修复后代码如下:

fn calculate_weight(amount: u128, starting_time: u64, ending_time: u64, duration: u64) -> u128 {
    let time_passed = (ending_time - starting_time) as u128;
    let duration_u128 = duration as u128;
    // 先乘后除避免整数提前截断导致精度损失
    amount * time_passed / duration_u128
}
效果验证

按照你给出的业务场景测试:

  • Alice在0时刻参与,time_passed = duration,计算结果为30000 * duration / duration = 30000,符合100%权重的预期
  • Bob在周期过半时参与,time_passed = duration/2,计算结果为30000 * (duration/2) / duration = 15000,符合50%权重的预期
可选扩展

如果业务需要支持四舍五入或者向上取整,可以调整除法逻辑:

  • 四舍五入:(amount * time_passed + duration_u128 / 2) / duration_u128
  • 向上取整:(amount * time_passed + duration_u128 - 1) / duration_u128

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 18:48:03