首页 > 解决方案 > 在 Rust 中将 u64 乘以 u128 时出错?

问题描述

我想将 u128 数字与 u64 数字相乘。u64 将始终小于或等于一。金额始终大于 1000000(100 万)

fn testing(amount:u128, starting_time:u64, ending_time:u64, duration:u64){
return amount*((ending_time - starting_time:u64)/duration) 
}

即使该数字应该返回 500,000 之类的值,它也总是返回零,除非((ending_time - starting_time:u64)/duration)等于 1,然后返回值总是等于。

如果某人最后进入彩票,我想给他们更少的权重。开始时间和结束时间都是 u64,因为它们是 UNIX 时间戳。

示例:假设 Alice 在时间 0 进入彩票。同时开始彩票。因此,Alice 将获得她存入金额的全部权重,假设她存入 30000,因此她将获得 30000 张门票。

Bob 在抽奖中途进入抽奖意味着无论他存入什么,他都将获得存入金额的一半权重。如果他存入 30000,他将获得 15000 张门票。

标签: rust

解决方案


我找到的最佳解决方案是:

(amount/1000000) * ((  ((end_time  - start_time)*1000000  )/duration ) as u128)

推荐阅读