3

所以,我正在做一个 C++ 项目。我有一个 long double 类型的 var,并为其分配了一个类似“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

4 回答 4

2

这似乎是编译器的问题。看看这里: http: //mingw.5.n7.nabble.com/Strange-behaviour-of-gcc-4-8-1-with-long-double-td32949.html

在传递给之前使用printf或转换变量的值。(顺便说一句,您确定需要 80 位精度吗?)doublecout

于 2015-06-08T13:18:04.057 回答
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;
}

我希望这可以帮助您了解您的编译器实际上可能存在问题。

来源->链接

于 2014-12-18T03:31:36.527 回答
-1

我在代码中看不出任何问题。我只是把它变成标准格式,它就可以工作。这是假设您发布的是全部内容的代码。

#include <iostream>

using namespace std;

int main(){
    long double var = 1.0202;
    cout.precision(5);
    cout << var << endl;
}

我希望这回答了你的问题。

编辑:PS越短越好,所以我有更好的解决方案(自以为是)。

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    long double var = 1.0202;
    //cout.precision(5);
    cout << setprecision(5) << var << endl;
}

我认为这个更好,因为它更短。如果你正在做更复杂的小数,我也建议使用 printf,因为 printf 可以选择哪些变量(如果你有多个)有小数或有多少。

于 2014-12-18T01:34:57.987 回答
-3

我刚刚发现了问题.. 它是 cstdlib 而不是 iostream 的包含。

于 2014-12-18T01:38:11.983 回答