double b = a / 100000;
b = (int) b;
b *= 100000;
Comment le code C ci-dessus est converti en Rust? Surtout la ligne # 2 qui arrondit le nombre.
Surtout la ligne # 2 qui arrondit le nombre.
Tout d'abord: ce n'est pas vrai. "Arrondir" un nombre réel revient à renvoyer l'entier le plus proche. Vous venez de le convertir en int
qui supprime toutes les parties non entières.
Mais voici l'équivalent Rust de votre code exact (en supposant que a
a le type f64
):
let b = a / 100_000.0; // underscore in number to increase readability
let b = b as i64;
let b = b * 100_000;
Ce qui, bien sûr, peut également être écrit sur une seule ligne:
let b = ((a / 100_000.0) as i64) * 100_000;
Si vous souhaitez arrondir au lieu de simplement prendre la partie entière, vous pouvez utiliser la méthode round
de f64
:
let b = ((a / 100_000.0).round() as i64) * 100_000;
Notez qu'il existe également trunc
, ceil
et floor
. Vous pouvez utiliser l'une de ces méthodes pour contrôler exactement ce qui se passe au lieu de vous fier à la distribution. À partir du livre Rust nous pouvons apprendre:
La conversion d'un flottant en un entier arrondira le flotteur vers zéro.
Ce comportement est équivalent à trunc
, mais si le comportement vous importe, vous devez utiliser trunc
pour ...
Pour convertir un flottant en un entier, vous pouvez utiliser as
. Par exemple:
let b = (a / 100000.0) as i64;
Ceci est un exemple de rond en rouille. Vous devez écrire des constantes numériques à droite du type qu'elles sont: par exemple si d est f64 et vous voulez le multiplier par 10, la bonne convention est d'écrire: d * 10.0 au lieu de: d * 10
et définissez explicitement le type de votre variable pour rendre la fonction ronde disponible dans ce cas.
let a = 2e50;
let mut b : f64 = a / 100000.0;
b = b.round();
println!("{}", b);