2017-02-17 122 views
0

我在做一个程序,它首先从用户处获得2个数字(包含float数据类型),然后询问用户想要得到的数字是多少,最后将其分开最多到这个数字和'cout < <'它。它编译但没有做到 - 当我计算22/7这个标记时,这是一个非理性的否定。最多可计算100位数字,最多可达30位或40位数字,其余部分填充零。事情是这样的: 3.1428570747375488281250000000000000000000000000000000000000000000000000000000000000000000000000000000setprecision()不能按预期工作

这里是我的代码:

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

具有6个或更少有效小数位的所有数字都可以转换为IEEE 754浮点值,而不会降低精度。阅读IEEE浮点类型。 –

+1

22/7绝对不是一个不合理的数字。 – molbdnilo

+0

哦,我的意思是PI @molbdnilo – ShivamProgramer

回答

3

浮点类型有一定的精度。在浮标(或双打)上操作时,不会得到确切的结果。现在要获得更好的精度,请使用double而不是float(有关更多详细信息,请参见this post)。

你可以#include <limits>,除去从输入得到精确的一步,你的代码更改为:

std::cout << std::setprecision(std::numeric_limits<float>::max_digits10);

显示具有最大精度为你使用类型的结果。