首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将“f64”转换为“f32”?

如何将“f64”转换为“f32”?
EN

Stack Overflow用户
提问于 2022-05-15 11:14:07
回答 1查看 1.3K关注 0票数 5

如何将f64转换为最近的f32

这里既没有From,也没有TryFrom实现,这大概是因为这种实现只为无损转换提供。我还在f64文档中搜索了对f64的引用,反之亦然,但一无所获。

代码语言:javascript
运行
复制
    let double: f64 = 0.;

    // doesn't work
    // let single: f32 = double.into();
    // let single: f32 = double.try_into().unwrap();
EN

回答 1

Stack Overflow用户

发布于 2022-05-15 11:14:07

在这种情况下,我们可以使用as关键字进行转换。通常不需要整数转换,因为“从较大的整数转换到较小的整数(例如u32 -> u8)将截断”,这通常是不需要的。然而,对于f64f32来说,这是非常明智的:

从f64转换到f32将产生最接近的f32

  • 如果有必要,舍入是按照roundTiesToEven模式
  • 进行溢出,无穷大(与输入符号相同)是产生

的。

代码语言:javascript
运行
复制
    let double: f64 = 42.;
    dbg!(double as f32);
代码语言:javascript
运行
复制
[src/main.rs:13] double as f32 = 42.0

如果不希望溢出到无穷大,而您想要恐慌,最简单的解决方案可能是检查is_finite

代码语言:javascript
运行
复制
fn f64_to_f32(x: f64) -> f32 {
    let y = x as f32;
    assert_eq!(
        x.is_finite(),
        y.is_finite(),
        "f32 overflow during conversion"
    );
    y
}
代码语言:javascript
运行
复制
fn main() {
    dbg!(f64_to_f32(42_f64));
    // dbg!(f64_to_f32(f64::MAX / 10.)); // panics
    dbg!(f64_to_f32(f64::NAN));
    dbg!(f64_to_f32(f64::INFINITY));
    dbg!(f64_to_f32(f64::NEG_INFINITY));
}
代码语言:javascript
运行
复制
[src/main.rs:2] f64_to_f32(42_f64) = 42.0
[src/main.rs:4] f64_to_f32(f64::NAN) = NaN
[src/main.rs:5] f64_to_f32(f64::INFINITY) = inf
[src/main.rs:6] f64_to_f32(f64::NEG_INFINITY) = -inf
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72247741

复制
相关文章

相似问题

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