36
votes

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
2

2 Answers

56
votes

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
}
28
votes

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