我有以下代码:

struct Stuff {
    thing: i8
}

fn main(){
    let theStuff = Stuff { thing: 1 };
    println!("{}", theStuff.thing * 1.5);
}

我从编译中得到以下信息:

error[E0277]: the trait bound `i8: std::ops::Mul<{float}>` is not satisfied
 --> IntFloatMultiply.rs:7:32
  |
7 |  println!("{}", theStuff.thing * 1.5);
  |                                ^ no implementation for `i8 * {float}`
  |
  = help: the trait `std::ops::Mul<{float}>` is not implemented for `i8`

我读过一些其他的帖子,包括一堆让我难以理解的东西(包括https://stackoverflow.com/a/44552464/1678392篇).如果我没有一个具体的答案,我不关心技术细节,也不关心什么或为什么.如何编译此代码,使其显示浮点结果?

推荐答案

假设您希望1 * 1.5的结果是一个浮点数,可以使用as运算符将thing转换为f64:

fn main() {
    let the_stuff = Stuff { thing: 1 };
    println!("{}", the_stuff.thing as f64 * 1.5);
}

这印1.5张.Rust迫使您明确说明不同的数字类型是如何相互作用的.

假设你总是将i8乘以1.5,那么你可以将结果拟合为f32返回类型:

fn main() {
    let the_stuff = Stuff { thing: i8::max_value() };
    println!("{}", the_stuff.thing as f32 * 1.5);
}

Rust相关问答推荐

为什么我的梅森素数代码的指数越大,速度就越快?

何时可以在Rust中退出异步操作?

使用pyo3::Types::PyIterator的无限内存使用量

如何提高自定义迭代器的`extend`性能

编译项目期间使用Cargo生成时出现rustc错误

Trait bound i8:来自u8的不满意

无法将 rust 蚀向量附加到另一个向量

获取已知数量的输入

使用 select 处理 SIGINT 和子等待!无阻塞

我可以解构self 参数吗?

Boxing 如何将数据从堆栈移动到堆?

可以在旋转循环中调用try_recv()吗?

如何在 Rust 中将 Vec> 转换为 Vec>?

在 Rust 中,Weak 如何知道内部值何时被删除?

产生拥有值的迭代器的 Rust 可变borrow 在循环中失败

使用 `clap` 在 Rust CLI 工具中设置布尔标志

强制特征仅在 Rust 中的给定类型大小上实现

当我不满足特征界限时会发生什么?

如何重写这个通用参数?

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?