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