setprecision()不能按预期工作
问题描述:
我在做一个程序,它首先从用户处获得2个数字(包含float数据类型),然后询问用户想要得到的数字是多少,最后将其分开最多到这个数字和'cout < <'它。它编译但没有做到 - 当我计算22/7这个标记时,这是一个非理性的否定。最多可计算100位数字,最多可达30位或40位数字,其余部分填充零。事情是这样的: 3.1428570747375488281250000000000000000000000000000000000000000000000000000000000000000000000000000000
setprecision()不能按预期工作
这里是我的代码:
#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);
显示具有最大精度为你使用类型的结果。
具有6个或更少有效小数位的所有数字都可以转换为IEEE 754浮点值,而不会降低精度。阅读IEEE浮点类型。 –
22/7绝对不是一个不合理的数字。 – molbdnilo
哦,我的意思是PI @molbdnilo – ShivamProgramer