double b = a/100000;
b = (int) b;
b *= 100000;
Come il codice C sopra riportato viene convertito in Ruggine? Soprattutto la linea n. 2 che arrotonda il numero.Converti float in intero in Rust
double b = a/100000;
b = (int) b;
b *= 100000;
Come il codice C sopra riportato viene convertito in Ruggine? Soprattutto la linea n. 2 che arrotonda il numero.Converti float in intero in Rust
Soprattutto la linea # 2 che arrotonda il numero.
Prima di tutto: questo non è vero. Per "arrotondare" un numero reale è necessario restituire il numero intero più vicino. Devi solo convertirlo in int
che scarta tutte le parti non interi.
Ma qui è l'equivalente della ruggine del codice esatto (supponendo a
ha il tipo di f64
):
let b = a/100_000.0; // underscore in number to increase readability
let b = b as i64;
let b = b * 100_000;
Il che, naturalmente, può essere scritto in una sola riga, anche:
let b = ((a/100_000.0) as i64) * 100_000;
Se si desidera arrotondare anziché prendere solo la parte intera, è possibile utilizzare il metodo round
di f64
:
let b = ((a/100_000.0).round() as i64) * 100_000;
Nota che ci sono anche trunc
, ceil
e floor
. Puoi usare uno di questi metodi per controllare esattamente cosa succede invece di fare affidamento sul cast. From the Rust book possiamo imparare:
La trasmissione da un valore float a un intero consente di arrotondare il galleggiante verso zero.
Questo comportamento è equivalente a trunc
, ma se il comportamento non importa a voi, è necessario utilizzare trunc
per ...
Questo è un esempio di rotondo in ruggine. Devi scrivere le costanti numeriche proprio il tipo che sono: per esempio se d è F64 e si desidera moltiplicarlo per 10 la convenzione giusto è quello di scrivere: D * 10.0 invece di: d * 10
e definire esplicitamente il tipo della variabile per rendere disponibile la funzione round in questo caso.
let a = 2e50;
let mut b : f64 = a/100000.0;
b = b.round();
println!("{}", b);
di gettare un galleggiante in un intero, è possibile utilizzare as
. Per esempio:
let b = (a/100000.0) as i64;