2016-05-29 20 views

Odpowiedz

14

Szczególnie linia nr 2, która zaokrągla liczbę.

Po pierwsze: to nie jest prawda. Aby "zaokrąglić" liczbę rzeczywistą, należy zwrócić najbliższą liczbę całkowitą. Przekonwertowałeś go na int, który odrzuca wszystkie niecałkowate części.


Ale tutaj jest odpowiednikiem Rust Twojego dokładnego kodu (zakładając a ma typ f64):

let b = a/100_000.0; // underscore in number to increase readability 
let b = b as i64; 
let b = b * 100_000; 

Który, oczywiście, może być napisana w jednym wierszu, TOO:

let b = ((a/100_000.0) as i64) * 100_000; 

Jeśli chcesz zaokrąglić, zamiast po prostu brać część całkowitą, możesz użyć metody round z f64:

let b = ((a/100_000.0).round() as i64) * 100_000; 

pamiętać, że istnieją również trunc, ceil i floor. Możesz użyć jednej z tych metod, aby dokładnie kontrolować, co się dzieje, zamiast polegać na obsadzie. From the Rust book możemy się nauczyć:

Rzucanie z liczby zmiennoprzecinkowej na liczbę całkowitą spowoduje zaokrąglenie wartości zmiennoprzecinkowej do zera.

Takie zachowanie jest równoznaczne trunc, ale jeśli zachowanie ma znaczenie dla ciebie, powinieneś użyć trunc do ...

  1. ... wyrazić swoje intencje w kodzie
  2. ... mają poprawną semantykę, nawet jeśli kompilator Rust zmienia semantykę rzutowania:
2

To jest przykład rundy w Rust. Trzeba napisać stałych numerycznych prawy typ one: na przykład jeśli d jest F64 i chcesz pomnożyć przez 10 prawo konferencyjnym jest napisać: D * 10,0 zamiast: D * 10

i jawnie zdefiniuj typ zmiennej, aby funkcja okrągła była dostępna w tych przypadkach.

let a = 2e50; 
let mut b : f64 = a/100000.0; 
b = b.round(); 
println!("{}", b); 
3

Aby rzucić pływaka do liczby całkowitej, można użyć as. Na przykład:

let b = (a/100000.0) as i64; 
Powiązane problemy