常规浮点文本不起作用:

extern crate num_traits;

use num_traits::float::Float;

fn scale_float<T: Float>(x: T) -> T {
    x * 0.54
}

fn main() {
    let a: f64 = scale_float(1.23);
}
error[E0308]: mismatched types
 --> src/main.rs:6:9
  |
6 |     x * 0.54
  |         ^^^^ expected type parameter, found floating-point variable
  |
  = note: expected type `T`
             found type `{float}`

推荐答案

使用FromPrimitive trait:

use num_traits::{cast::FromPrimitive, float::Float};

fn scale_float<T: Float + FromPrimitive>(x: T) -> T {
    x * T::from_f64(0.54).unwrap()
}

或标准库From/Into特征

fn scale_float<T>(x: T) -> T
where
    T: Float,
    f64: Into<T>
{
    x * 0.54.into()
}

另见:

Rust相关问答推荐

Arrow RecordBatch as Polars DataFrame

异步FN中的 rust 递归

有没有办法避免在While循环中多次borrow `*分支`

捕获FnMut闭包的时间不够长

是否可以使用Serde/Rust全局处理无效的JSON值?

`actix-web` 使用提供的 `tokio` 运行时有何用途?

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

Button.set_hexpand(false) 不会阻止按钮展开

Rust中如何实现一个与Sized相反的负特性(Unsized)

如何在 Rust 中将枚举变体转换为 u8?

将原始可变指针传递给 C FFI 后出现意外值

改变不实现克隆的 dioxus UseState struct

使用方法、关联函数和自由函数在 Rust 中初始化函数指针之间的区别

覆盖类型的要求到底是什么?为什么单个元素元组满足它?

为什么我可以在没有生命周期问题的情况下内联调用 iter 和 collect?

如何将 u8 切片复制到 u32 切片中?

如何从 Rust 中不同类型的多个部分加入 Path?

为什么这里需要类型注解?

为什么 `ref` 会导致此示例*取消引用*一个字段?

有什么办法可以用 Rust 访问 Windows 最近的文件夹吗?