将 i128 转换为 f64 的正确方法是什么

问题描述 投票:0回答:1

我想将 i128 转换f64

我知道我可以用

as
默默地施放。

let nb: i128 = 1337;
let converted = nb as f64;

但是它没有给我处理任何错误的机会。

有没有办法做类似的事情

let nb: i128 = 1337;
let converted: f64 = nb.try_into()?;

如果转换后的值不适合 f64,我可以在哪里处理错误?

rust type-conversion
1个回答
0
投票

没有标准

f64::try_from(i128)

您可以依靠相互
as
强制转换后的检查来创建自己的函数。

fn try_to_f64(v: i128) -> Result<f64, &'static str> {
    let attempt = v as f64;
    match attempt as i128 == v {
        true => Ok(attempt),
        false => Err("precision loss in i128 to f64 conversion"),
    }
}

fn main() {
    for v in [
        123_456_789,
        123_456_789_123,
        123_456_789_123_456,
        123_456_789_123_456_789,
    ] {
        println!("{} ~~> {:?}", v, try_to_f64(v));
    }
}
/*
123456789 ~~> Ok(123456789.0)
123456789123 ~~> Ok(123456789123.0)
123456789123456 ~~> Ok(123456789123456.0)
123456789123456789 ~~> Err("precision loss in i128 to f64 conversion")
*/
© www.soinside.com 2019 - 2024. All rights reserved.