Convert float to integer in Rust
Especially the line #2 that rounds the number.
First of all: this is not true. To "round" a real number is to return the nearest integer. You just convert it to int
which discards all the non-integer parts.
But here is the Rust equivalent of your exact code (assuming a
has the type f64
):
let b = a / 100_000.0; // underscore in number to increase readability
let b = b as i64;
let b = b * 100_000;
Which, of course, can be written in one line, too:
let b = ((a / 100_000.0) as i64) * 100_000;
If you wanted to round instead of just taking the integer part, you can use the round
method of f64
:
let b = ((a / 100_000.0).round() as i64) * 100_000;
Note that there are also trunc
, ceil
and floor
. You can use one of those methods to exactly control what happens instead of relying on the cast. From the Rust book we can learn:
Casting from a float to an integer will round the float towards zero.
This behavior is equivalent to trunc
, but if the behavior does matter to you, you should use trunc
to ...
- ... express your intent in code
- ... have valid semantics even if the Rust compiler changes the cast semantics
To cast a float to an integer, you can use as
. For example:
let b = (a / 100000.0) as i64;