Если вы хотите поддерживать только типы u8
и u16
, то достаточно:
fn percent<T: Into<f32>>(x: T) -> f32 {
x.into() / 100.0
}
, поскольку и u8
, и u16
можно без потерь преобразовать в f32
, Если вы хотите произвести общее преобразование, скажем, от u64
до f64
, где может произойти потеря точности, вы можете использовать черту ApproxInto
из conv
.
fn percent<T: ApproxInto<f64>>(x: T) -> Result<f64, T::Err> {
x.approx_into().map(|v| v / 100.0)
}