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?
No answers yet.
Inicia sesión para dejar una respuesta