Correct use of std::cout.precision() - not printing trailing zeros
Solution 1
#include <iostream>
#include <stdlib.h>
#include <iomanip>
int main()
{
int a = 5;
int b = 10;
std::cout << std::fixed;
std::cout << std::setprecision(4);
std::cout << (float)a/(float)b << "\n";
return 0;
}
You need to pass std::fixed
manipulator to cout
in order to show trailing zeroes.
Solution 2
std::cout.precision(4);
tells the maximum number of digits to use not the minimum.
that means, for example, if you use
precision 4 on 1.23456 you get 1.235
precision 5 on 1.23456 you get 1.2346
If you want to get n
digits at all times you would have to use std::fixed
.
Solution 3
The behavior is correct. The argument specifies the maximum meaningful amount of digits to use. It is not a minimum. If only zeroes follow, they are not printed because zeroes at the end of a decimal part are not meaningful. If you want the zeroes printed, then you need to set appropriate flags:
std::cout.setf(std::ios::fixed, std::ios::floatfield);
This sets the notation to "fixed", which prints all digits.

mahmood
Updated on January 21, 2020Comments
-
mahmood over 3 years
I see many questions about the precision number for floating point numbers but specifically I want to know why this code
#include <iostream> #include <stdlib.h> int main() { int a = 5; int b = 10; std::cout.precision(4); std::cout << (float)a/(float)b << "\n"; return 0; }
shows
0.5
? I expect to see0.5000
. Is it because of the original integer data types?