所以,我正在研究一个C ++项目。我有一个long long double类型并为其赋值“1.02”
然后,我尝试使用cout打印它,结果是:-0
我已经尝试过使用setprecision,我发现了谷歌搜索问题。
这是什么解决方案?
示例代码:
#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;
}
操作系统:Windows 8.1 64位 编译器:minGW IDE:NetBeans 8.0.2
答案 0 :(得分:2)
这似乎是编译器的问题。看看这里:http://mingw.5.n7.nabble.com/Strange-behaviour-of-gcc-4-8-1-with-long-double-td32949.html
在传递给printf
之前,使用double
或将变量的值转换为cout
。 (BTW确定你需要80位精度?)
答案 1 :(得分:0)
这是一种更简单的方法,但您的程序适用于我的编译器。
#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;
}
我希望这可以帮助您了解您的编译器可能确实存在问题。
来源 - &gt; Link
答案 2 :(得分:-1)
我在代码中看不出任何错误。我只是把它放到一个标准格式,它的工作原理。这是代码,假设您发布的是整个事情。
#include <iostream>
using namespace std;
int main(){
long double var = 1.0202;
cout.precision(5);
cout << var << endl;
}
我希望这能回答你的问题。
编辑: 附:越短越好,所以我有一个更好的解决方案(自以为是)。
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
long double var = 1.0202;
//cout.precision(5);
cout << setprecision(5) << var << endl;
}
我认为这个更好,因为它更短。如果你做的是更复杂的小数,我还建议使用printf,因为printf可以选择哪些变量(如果你有多个)有小数或多少。
答案 3 :(得分:-3)
我只知道问题..这是cstdlib的包含而不是iostream。