Avatar ·

Cómo convertir tipos numéricos de forma segura e idiomática en Rust

¡Hola a todos! Acabo de empezar a aprender Rust después de C++ y Python, y tengo un serio problema con la conversión de números. En C++ solía escribir simplemente `(int)my_float` o `static_cast(value)`, y funcionaba. Pero en Rust el compilador se queja constantemente. Aquí hay una situación concreta: estoy escribiendo un programa que calcula el promedio aritmético. Tengo un vector de enteros y necesito obtener el resultado como un número de punto flotante. ```rust fn average(numbers: &[i32]) -> f64 { let sum: i32 = numbers.iter().sum(); sum / numbers.len() as f64 // Esto funciona, pero se ve torpe } ``` Parece que funciona, pero siento que no es correcto. Además, cuando intento hacer la conversión inversa —de `f64` a `i32`—, el compilador da un error de que no se puede simplemente convertir. Por ejemplo: ```rust let x: f64 = 3.14; let y: i32 = x as i32; // Esto funciona, pero se pierden datos ``` Entiendo que Rust se preocupa por la seguridad, pero ¿cómo se convierte correctamente?