簡體   English   中英

如何將 `f64` 轉換為 `f32`?

[英]How to convert a `f64` to a `f32`?

如何將f64轉換為最接近的f32

既沒有From也沒有TryFrom實現,大概是因為此類實現僅用於無損轉換。 我還在f64文檔中搜索了對f32的引用,反之亦然,但一無所獲。

    let double: f64 = 0.;

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

在這種情況下,我們可以使用as關鍵字進行轉換。 integer 轉換通常不需要,因為“從較大的 integer 轉換為較小的 integer(例如 u32 -> u8)會被截斷”,這通常是不需要的。 然而,對於f64f32 ,這是非常明智的:

從 f64 轉換為 f32 將產生最接近的 f32

  • 如有必要,舍入是根據 roundTiesToEven 模式
  • 溢出時,產生無窮大(與輸入符號相同)

Rust 參考

    let double: f64 = 42.;
    dbg!(double as f32);
[src/main.rs:13] double as f32 = 42.0

如果不希望溢出到無窮大並且您想恐慌,那么最簡單的解決方案可能是檢查is_finite

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
}
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));
}
[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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM