【问题标题】:setprecision() not working as expectedsetprecision() 没有按预期工作
【发布时间】:2017-02-17 09:00:01
【问题描述】:

我正在做一个程序,它首先从用户那里获取 2 个数字(使用 float 数据类型),然后询问用户他想要将数字除以哪个数字,最后将其除以该数字和 ' cout3.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;
}

【问题讨论】:

  • 所有具有 6 个或更少有效十进制数字的数字都可以转换为 IEEE 754 浮点值而不会损失精度。阅读 IEEE 浮点类型。
  • 22/7 绝对不是一个无理数。
  • 哦,我的意思是 PI @molbdnilo
  • @ErikAlapää 你能指点我一些这样的文件吗??
  • @ShivamProgramer> 如果你真的想了解数值计算,最好的办法可能是利用科学计算方面的书籍。这可能是一个好的开始,我很久以前使用过这些作者的一本研究生水平的书:amazon.co.uk/Numerical-Mathematics-Computing-Kincaid-Hardcover/…

标签: c++ iomanip


【解决方案1】:

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

您可以#include &lt;limits&gt;,删除从输入中获取精度的步骤并将您的代码更改为:

std::cout &lt;&lt; std::setprecision(std::numeric_limits&lt;float&gt;::max_digits10);

根据您使用的类型以最大精度显示结果。

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    • 2014-11-15
    • 1970-01-01
    • 2012-07-02
    • 2011-09-07
    • 2013-03-03
    • 2015-05-18
    相关资源
    最近更新 更多