Avatar ·

Comment convertir des types numériques en Rust de manière sécurisée et idiomatique ?

Bonjour ! J'ai récemment commencé à apprendre Rust et j'ai rencontré un problème avec la conversion de nombres. Dans d'autres langages (C++, Python), je pouvais simplement écrire `(int)float_var` ou `int(float_var)`, et tout fonctionnait. Mais en Rust, le compilateur râle constamment. Voici un exemple de code que j'essaie d'écrire : ```rust fn main() { let a: u8 = 10; let b: u16 = 20; let sum = a + b; // Erreur : cannot add `u16` to `u8` let pi: f64 = 3.14159; let int_pi: u32 = pi; // Erreur : expected `u32`, found `f64` let x: i32 = 100; let y: u32 = x; // Erreur : expected `u32`, found `i32` } ``` Je comprends que Rust est fortement typé, mais comment effectuer correctement ces conversions ? J'ai entendu parler de `as`, mais il se comporte dangereusement en cas de dépassement. Existe-t-il des moyens sécurisés et idiomatiques ? J'ai besoin : 1. De convertir entre entiers de différentes tailles (u8 -> u16, i32 -> u64) 2. De convertir entre types signés et non signés 3. De convertir des nombres à virgule flottante en entiers et vice versa