I\'ve been trying to write some Rust code in a very generic way, without specifying the types explicitly. However, I arrived at a point where I need to convert a usiz
You can do it using as:
let num: f64 = 12 as f64 ;
The problem is that integer → floating point conversions, where the float type is the same size or smaller than the integer, cannot preserve all values. So usize → f64 loses precision on 64-bit.
These sorts of conversions are basically the raison d'être for the conv crate, which defines numerous fallible conversions between types (mostly built-in numeric ones). This (as of 10 minutes ago) includes isize/usize → f32/f64.
Using conv, you can do this:
use conv::prelude::*;
...
where T: ValueFrom<usize> + ...
...
ans[k] = ans[k - 1] / (k + 1).value_as::<T>().unwrap();
...
Disclaimer: I am the author of the crate in question.