Rust 将浮动值限制在最小/最大范围内

Rust 将浮动值限制在最小/最大范围内,rust,Rust,给定一些任意的浮点值,将该值限制在最小/最大范围的惯用方法是什么?即,如果提供的值低于最小值,则返回最小范围值;如果提供的值高于最大值,则返回最大范围值。否则将返回原始浮点值 我认为这种方法会奏效,但它没有给我正确的值: fn main(){ dbg!(最小值最大值(150.0,0.0,100.0)); //因为150.0大于100.0,所以应该返回100.0 //当前返回0.0 dbg!(最小值最大值(-100.0,0.0,100.0)); //因为-100.0低于最小值0.0,所以应返回0.

给定一些任意的浮点值,将该值限制在最小/最大范围的惯用方法是什么?即,如果提供的值低于最小值,则返回最小范围值;如果提供的值高于最大值,则返回最大范围值。否则将返回原始浮点值

我认为这种方法会奏效,但它没有给我正确的值:

fn main(){
dbg!(最小值最大值(150.0,0.0,100.0));
//因为150.0大于100.0,所以应该返回100.0
//当前返回0.0
dbg!(最小值最大值(-100.0,0.0,100.0));
//因为-100.0低于最小值0.0,所以应返回0.0
//当前返回0.0
}
fn最小值_最大值(值:f32,最小值:f32,最大值:f32)->f32{
返回值max(max).min(min);
}    

你几乎是对的,但事实恰恰相反:

fn main(){
    // Because 150.0 is greater than 100.0, returns 100.0
    dbg!(min_max(150.0, 0.0, 100.0));
    // Because -100.0 is below the minimum value of 0.0, returns 0.0
    dbg!(min_max(-100.0, 0.0, 100.0));
    // Because 70.0 is in-between, returns itself
    dbg!(min_max(70.0, 0.0, 100.0));
}

fn min_max(val: f32, min: f32, max: f32)->f32{
    return val.min(max).max(min);
}    
由于
max
始终返回两个数字之间的最大值(基于),因此实际上您正在设置一个最小输出值,就像另一个值较低一样,将选择此值,例如:

  • 150和100之间的最大值为150<代码>150f32。最大值(100.0)=150
  • 50到100之间的最大值为100<代码>50f32。最大值(100.0)==100

同样的逻辑也适用于
min
,它可以用来设置最大值。

您几乎是正确的,但实际上恰恰相反:

fn main(){
    // Because 150.0 is greater than 100.0, returns 100.0
    dbg!(min_max(150.0, 0.0, 100.0));
    // Because -100.0 is below the minimum value of 0.0, returns 0.0
    dbg!(min_max(-100.0, 0.0, 100.0));
    // Because 70.0 is in-between, returns itself
    dbg!(min_max(70.0, 0.0, 100.0));
}

fn min_max(val: f32, min: f32, max: f32)->f32{
    return val.min(max).max(min);
}    
由于
max
始终返回两个数字之间的最大值(基于),因此实际上您正在设置一个最小输出值,就像另一个值较低一样,将选择此值,例如:

  • 150和100之间的最大值为150<代码>150f32。最大值(100.0)=150
  • 50到100之间的最大值为100<代码>50f32。最大值(100.0)==100

同样的逻辑也适用于
min
,它可以用来设置最大值。

pheki的回答解释了您的尝试失败的原因,但还有一种方法专门用于此任务:

fn main(){
dbg!(150.0μf32.夹具(0.0100.0));/=100.0
dbg!(-100.0_f32).夹具(0.0100.0));/=0.0
}

(需要添加的
\u f32
后缀来告诉Rust我们想要使用
f32
数字,而不是可能的
f64
——否则程序将无法编译。只有在这个小示例中才需要它们,因为没有函数签名或任何其他指定我们想要使用哪种类型的东西。)pheki的回答解释了您的尝试失败的原因,但也有一种专门用于此任务的方法:

fn main(){
dbg!(150.0μf32.夹具(0.0100.0));/=100.0
dbg!(-100.0_f32).夹具(0.0100.0));/=0.0
}

(需要添加的
\u f32
后缀来告诉Rust我们想要使用
f32
数字,而不是可能的
f64
——否则程序将无法编译。只有在这个小示例中才需要它们,因为没有函数签名或任何其他指定我们想要使用哪种类型的东西。)

您使用的
\u f32
标记是什么?@ANimator120我在答案中添加了一部分。它们只用于小的演示代码。您使用的
\u f32
标记是什么?@ANimator120我在答案中添加了一部分。它们只用于小的演示代码。