Avatar ·

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

Olá a todos! Comecei a aprender Rust depois de C++ e Python, e estou tendo um sério problema com conversão de números. Em C++, eu estava acostumado a simplesmente escrever `(int)my_float` ou `static_cast(value)`, e tudo funcionava. Mas no Rust, o compilador reclama o tempo todo. Aqui está a situação específica: estou escrevendo um programa que calcula a média aritmética. Tenho um vetor de inteiros e preciso obter o resultado como um número de ponto flutuante. ```rust fn average(numbers: &[i32]) -> f64 { let sum: i32 = numbers.iter().sum(); sum / numbers.len() as f64 // Isso funciona, mas parece estranho } ``` Até funciona, mas sinto que não está correto. Além disso, quando tento fazer a conversão inversa — de `f64` para `i32` — o compilador dá erro, dizendo que não é possível simplesmente converter. Por exemplo: ```rust let x: f64 = 3.14; let y: i32 = x as i32; // Isso funciona, mas perde dados ``` Entendo que Rust se preocupa com segurança, mas como converter corretamente