问题
So, I'm working on a C++ project. I have a var of long double type and assigned it a value like "1.02"
Then, I try to use cout to print it and the result is: -0
I already tried to use setprecision and all I found googling the problem.
What is the solution for this?
Example code:
#include <cstdlib>
#include <iomanip>
using namespace std;
int main(int argc, char** argv)
{
cout.precision(15);
long double var = 1.2;
cout << var << endl;
return 0;
}
OS: Windows 8.1 64 bits Compiler: minGW IDE: NetBeans 8.0.2
回答1:
It seems to be a problem with compiler. Take a look here: http://mingw.5.n7.nabble.com/Strange-behaviour-of-gcc-4-8-1-with-long-double-td32949.html
Use printf
or convert a value of your variable to double
before passing to cout
. (BTW are sure you need 80-bit precision?)
回答2:
This is an easier method, but your program worked on my compiler.
#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
std::setprecision(10);
long double var = 1.023563457578;
cout << var << endl;
return 0;
}
I hope this helps you see that your compiler might actually have a problem.
Source - > Link
回答3:
I see nothing wrong at all in the code. I just put it into a standard format and it works. Here is the code assuming what you posted is the entire thing.
#include <iostream>
using namespace std;
int main(){
long double var = 1.0202;
cout.precision(5);
cout << var << endl;
}
I hope this answers your question.
Edit: P.S. Shorter, the better, so I have a better solution (opinionated).
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
long double var = 1.0202;
//cout.precision(5);
cout << setprecision(5) << var << endl;
}
I think this one is better since it is shorter. I would also recommend using printf if you are doing more complex decimal stuff since printf can choose which variables (if you have multiple) have decimals or how much.
回答4:
I just figured out the problem.. It was the include of cstdlib instead of iostream.
来源:https://stackoverflow.com/questions/27537775/cout-long-double-issue