Avatar ·

Como converter tipos numéricos de forma segura e idiomática em Rust?

Olá! Recentemente comecei a estudar Rust e me deparei com um problema de conversão de números. Em outras linguagens (C++, Python), eu simplesmente escrevia `(int)float_var` ou `int(float_var)`, e tudo funcionava. Mas em Rust, o compilador reclama constantemente. Aqui está um exemplo de código que estou tentando escrever: ```rust fn main() { let a: u8 = 10; let b: u16 = 20; let sum = a + b; // Erro: cannot add `u16` to `u8` let pi: f64 = 3.14159; let int_pi: u32 = pi; // Erro: expected `u32`, found `f64` let x: i32 = 100; let y: u32 = x; // Erro: expected `u32`, found `i32` } ``` Eu entendo que Rust é fortemente tipado, mas como realizar essas conversões corretamente? Ouvi falar sobre `as`, mas ele se comporta de forma perigosa em caso de overflow. Existem maneiras seguras e idiomáticas? Preciso: 1. Converter entre inteiros de tamanhos diferentes (u8 -> u16, i32 -> u64) 2. Converter entre tipos com e sem sinal 3. Converter números de ponto flutuante para inteiros e vice-versa