Avatar ·

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

¡Hola! Recientemente comencé a aprender Rust y me encontré con el problema de convertir números. En otros lenguajes (C++, Python) simplemente escribía `(int)float_var` o `int(float_var)`, y funcionaba. Pero en Rust el compilador se queja constantemente. Aquí hay un ejemplo de código que intento escribir: ```rust fn main() { let a: u8 = 10; let b: u16 = 20; let sum = a + b; // Error: cannot add `u16` to `u8` let pi: f64 = 3.14159; let int_pi: u32 = pi; // Error: expected `u32`, found `f64` let x: i32 = 100; let y: u32 = x; // Error: expected `u32`, found `i32` } ``` Entiendo que Rust está fuertemente tipado, pero ¿cómo realizar estas conversiones correctamente? He oído sobre `as`, pero se comporta de manera peligrosa en caso de desbordamiento. ¿Existen formas seguras e idiomáticas? Necesito: 1. Convertir entre enteros de diferente tamaño (u8 -> u16, i32 -> u64) 2. Convertir entre tipos con signo y sin signo 3. Convertir números de punto flotante a enteros y viceversa