首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用泛型类型时,如何使用浮点数文字?

在使用泛型类型时,如何使用浮点数文字?
EN

Stack Overflow用户
提问于 2018-06-09 04:22:14
回答 3查看 1.9K关注 0票数 7

常规的浮点型文字不起作用:

代码语言:javascript
复制
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);
}
代码语言:javascript
复制
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}`
EN

回答 3

Stack Overflow用户

发布于 2018-06-09 05:23:34

您不能直接从文字创建Float。我建议一种类似于FloatConst特征的方法:

代码语言:javascript
复制
trait SomeDomainSpecificScaleFactor {
    fn factor() -> Self;
}

impl SomeDomainSpecificScaleFactor for f32 {
    fn factor() -> Self {
        0.54
    }
}

impl SomeDomainSpecificScaleFactor for f64 {
    fn factor() -> Self {
        0.54
    }
}

fn scale_float<T: Float + SomeDomainSpecificScaleFactor>(x: T) -> T {
    x * T::factor()
}

(link to playground)

票数 1
EN

Stack Overflow用户

发布于 2022-02-09 23:04:41

如今,numeric_literals crate及其replace_float_literals特性可以帮助您对复杂的代码段进行必要的替换。

票数 1
EN

Stack Overflow用户

发布于 2019-04-12 10:24:13

在某些情况下,您可以添加一个限制,即泛型类型必须能够与文本的类型相乘。在这里,我们允许任何可以被f64相乘的类型,只要它通过特征绑定Mul<f64, Output = T>产生T的输出类型

代码语言:javascript
复制
use num_traits::float::Float; // 0.2.6
use std::ops::Mul;

fn scale_float<T>(x: T) -> T
where
    T: Float + Mul<f64, Output = T>,
{
    x * 0.54
}

fn main() {
    let a: f64 = scale_float(1.23);
}

这可能不直接适用于原始问题,但它可能取决于您需要处理的具体类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50767912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档