为什么 std::cout 以相同的小数精度打印浮点数、双精度数和长双精度数?

Why does std::cout print floats, doubles and long doubles to the same decimal precision?

直觉上我认为长双精度数比双精度数多,双精度数比浮点数多,但是,如果是这样,为什么 std::cout 同时打印出浮点数、双精度数和长双精度数十进制精度,即使它们对所有原始数据类型都有重载?

C++ 源代码:

#include <iostream>

#define PI 3.1415926535897932384626433832;

int main()
{
    float f = PI;
    double d = PI;
    long double ld = PI;

    std::cout << f << std::endl;
    std::cout << d << std::endl;
    std::cout << ld << std::endl;

    return 0;
}

输出:

3.14159
3.14159
3.14159

值根据类型具有固定的精度,您无法更改它。它是实现定义的。您只能更改输出的精度,所有类型的浮点数只有一个设置。 float、double 和 long double 不能有不同的输出精度。所有类型的浮点数的默认输出精度为 6.

从技术上讲,无法为例如设置不同的输出精度。 float 比例如double.

std::setprecision 没有重载。每个 std::basic_ostream 只能保存一个精度值。

您可能想看看 <iomanip> 库中的 setprecision 函数。这将解决您的问题。通过调用此函数,您可以为打印输出设置小数点。检查下面的例子:

#include <iostream>
#include <iomanip>
#include <limits>

using namespace std;

int main() {
    float a,b;
    cin>>a>>b;
    float c=a+b;
    cout<<fixed<<setprecision(1)<<c;// to print the decimal point scaled to 1

    return 0;
}

如果您还有问题,请告诉我。