我想将 i128 转换 为 f64。
我知道我可以用
as
默默地施放。
let nb: i128 = 1337;
let converted = nb as f64;
但是它没有给我处理任何错误的机会。
有没有办法做类似的事情
let nb: i128 = 1337;
let converted: f64 = nb.try_into()?;
如果转换后的值不适合 f64,我可以在哪里处理错误?
没有标准
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")
*/