Cout long double issue

Cout long double issue

本文关键字:issue double long Cout      更新时间:2023-10-16

所以,我正在做一个C++项目。我有一个长双精度类型的变量,并为其分配了一个类似"1.02"的值

然后,我尝试使用 cout 打印它,结果是:-0

我已经尝试使用设置精度,我发现谷歌搜索问题。

对此的解决方案是什么?

示例代码:

#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;
}

操作系统: 视窗 8.1 64 位编译器: minGWIDE: NetBeans 8.0.2

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

在传递到cout之前,请使用printf或将变量的值转换为double。(顺便说一句,你确定你需要80位精度吗?

这是一种更简单的方法,但您的程序适用于我的编译器。

#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;
}

我希望这可以帮助您看到您的编译器实际上可能有问题。

来源 ->链接

我在代码中完全没有看到任何错误。我只是把它放成标准格式,它就可以工作了。这是假设您发布的内容是整个内容的代码。

#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 可以选择哪些变量(如果您有多个(具有小数或多少。

我刚刚弄清楚了问题。它是cstdlib而不是iostream的包含。