Cout长双重问题

时间:2014-12-18 01:26:28

标签: c++ netbeans cout long-double

所以,我正在研究一个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

4 个答案:

答案 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。