为什么 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;
}
如果您还有问题,请告诉我。
直觉上我认为长双精度数比双精度数多,双精度数比浮点数多,但是,如果是这样,为什么 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;
}
如果您还有问题,请告诉我。