double b = a / 100000;
b = (int) b;
b *= 100000;
How the above C code is converted to Rust? Especially the line #2 that rounds the number.
double b = a / 100000;
b = (int) b;
b *= 100000;
How the above C code is converted to Rust? Especially the line #2 that rounds the number.
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 ...
To cast a float to an integer, you can use as
. For example:
let b = (a / 100000.0) as i64;
This is an example of round in Rust. You have to write numeric constants right the type they are: for example if d is f64 and you want to multiply it by 10 the right convention is to write: d * 10.0 instead of: d * 10
and explicitly define the type of your variable to make the round function available in this cases.
let a = 2e50;
let mut b : f64 = a / 100000.0;
b = b.round();
println!("{}", b);