Comment convertir des types numériques en Rust de manière sûre et idiomatique ?
Bonjour à tous ! Je viens de commencer à apprendre Rust après C++ et Python, et j'ai un sérieux problème avec la conversion de nombres. En C++, j'avais l'habitude d'écrire simplement `(int)my_float` ou `static_cast(value)`, et tout fonctionnait. Mais en Rust, le compilateur râle constamment.
Voici une situation concrète : j'écris un programme qui calcule la moyenne arithmétique. J'ai un vecteur d'entiers et j'ai besoin d'obtenir le résultat sous forme de nombre à virgule flottante.
```rust
fn average(numbers: &[i32]) -> f64 {
let sum: i32 = numbers.iter().sum();
sum / numbers.len() as f64 // Ça marche, mais ça semble moche
}
```
Ça a l'air de fonctionner, mais je sens que ce n'est pas correct. De plus, quand j'essaie de faire la conversion inverse — de `f64` à `i32` — le compilateur renvoie une erreur, disant qu'on ne peut pas simplement prendre et convertir. Par exemple :
```rust
let x: f64 = 3.14;
let y: i32 = x as i32; // Ça marche, mais on perd des données
```
Je comprends que Rust se soucie de la sécurité, mais comment convertir correctement