setprecision() 没有按预期工作
setprecision() not working as expected
我正在做一个程序,首先从用户那里获取 2 个数字(具有 float 数据类型),然后询问用户他想要将数字除以什么数字,最后将它除以那个数字和 'cout<<' 它。当我计算 22/7 这是一个非理性的数字时,它编译了但没有达到标准。最多 100 位数字,它只计算了最多 30 或 40 位数字,然后其余部分用零填充。是这样的:
3.1428570747375488281250000000000000000000000000000000000000000000000000000000000000000000000000000000
这是我的代码:
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
int main()
{
system("clear");
float y;
int z;
float x;
float a;
cout << "\nHello User\n";
cout << "\nEnter first num to be divided: ";
cin >> x;
cout << "\nCool!! Now enter the 2nd number: \n";
cin >> y;
cout << "\Exelent!! Enter the place upto which u wanna caculate: ";
cin >> z;
a = x / y;
cout << fixed << showpoint;
cout << setprecision(z);
cout << "Calculating......\n" << a << endl;
return 0;
}
浮点类型有一定的精度。在浮点数(或双精度数)上操作时,您不会得到准确的结果。现在要获得更好的精度,请使用 double
而不是 float
(有关详细信息,请参阅 this post)。
您可以 #include <limits>
,删除从输入中获取精度的步骤并将您的代码更改为:
std::cout << std::setprecision(std::numeric_limits<float>::max_digits10);
以您使用的类型的最高精度显示结果。
我正在做一个程序,首先从用户那里获取 2 个数字(具有 float 数据类型),然后询问用户他想要将数字除以什么数字,最后将它除以那个数字和 'cout<<' 它。当我计算 22/7 这是一个非理性的数字时,它编译了但没有达到标准。最多 100 位数字,它只计算了最多 30 或 40 位数字,然后其余部分用零填充。是这样的:
3.1428570747375488281250000000000000000000000000000000000000000000000000000000000000000000000000000000
这是我的代码:
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
int main()
{
system("clear");
float y;
int z;
float x;
float a;
cout << "\nHello User\n";
cout << "\nEnter first num to be divided: ";
cin >> x;
cout << "\nCool!! Now enter the 2nd number: \n";
cin >> y;
cout << "\Exelent!! Enter the place upto which u wanna caculate: ";
cin >> z;
a = x / y;
cout << fixed << showpoint;
cout << setprecision(z);
cout << "Calculating......\n" << a << endl;
return 0;
}
浮点类型有一定的精度。在浮点数(或双精度数)上操作时,您不会得到准确的结果。现在要获得更好的精度,请使用 double
而不是 float
(有关详细信息,请参阅 this post)。
您可以 #include <limits>
,删除从输入中获取精度的步骤并将您的代码更改为:
std::cout << std::setprecision(std::numeric_limits<float>::max_digits10);
以您使用的类型的最高精度显示结果。