Reputation: 781
I'm learning Rust, but when I print a decimal number, only the integer part is printed, not the decimal part:
fn main(){
println!("{:.3}", 22/7);
}
// This only show 3
but when I print the decimal number explicitly, it works correctly:
fn main(){
println!("{:.3}", 0.25648);
}
// this print 0.256
Upvotes: 64
Views: 38203
Reputation: 15942
Just like in C and C++, dividing integers results in another integer. Try this C++ program to see:
#include <iostream>
using namespace std;
int main()
{
cout << 22 / 7 << endl; // 3
cout << 22.0 / 7.0 << endl; // 3.14286
}
Similarly in Rust, you need to specify both numbers as floats instead, which is done by putting a decimal anywhere in the number. Try this Rust equivalent of the above program:
fn main() {
println!("{:.3}", 22 / 7); // 3
println!("{:.3}", 22.0 / 7.0); // 3.143
}
If you have variables, you can convert them with as
to either f32
or f64
, depending on your needs:
fn main() {
let x = 22;
println!("{:.3}", x / 7); // 3
println!("{:.3}", x as f32 / 7.0); // 3.143
}
Upvotes: 83
Reputation: 6298
When you are working with integer variables and do not have the option to add decimal points you can convert the integer variables into floats using the as
keyword:
fn main() {
let a = 42;
let b = 23;
let c = a / b; // integer division
let d = a as f64 / b as f64; // cast both variables to float before division
println!("integer division: {}\nfloat division: {}", c, d);
}
This returns the following values:
integer division: 1
float division: 1.826086956521739
Upvotes: 39