【问题标题】:In C++, how do I obtain an output exactly like a calculator?在 C++ 中,如何获得与计算器完全一样的输出?
【发布时间】:2015-10-31 18:52:01
【问题描述】:

我使用 setprecision & fixed,但我想切断尾随零,我该如何为 cout 做到这一点?

#include <iostream>
#include<iomanip>

int main()
{
    double b = 132.7489;
    double a = 49.932;
    double e = a + b;
    std::cout << std::fixed;
    std::cout << std::setprecision(20);
    std::cout << e;
}

我如何告诉程序像计算器一样自动切断小数点后的精确答案。抱歉,这是我第一次来这里。我已经习惯了 Javascript,而且我从来没有遇到过精确数学的问题。我到处都用谷歌搜索过。

【问题讨论】:

  • 显示代码,这样我们就可以知道你到底做了什么......
  • 为什么这样的东西不起作用? std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(3) &lt;&lt; 4.32523626;
  • 如果数字是 4.3000000,您的解决方案将给他 4.300。他想要 4.3

标签: c++


【解决方案1】:

这样就可以了……

#include <iostream>

using namespace std;

int main()
{

    float f = 42.43500000f, f2 = 25.004300;
    cout << defaultfloat << f << endl;
    cout << defaultfloat << f2 << endl;

    return 0;
}

defaultfloat 是在 std 命名空间中定义的格式标志。

【讨论】:

  • 我正在使用 GNU GCC 编译器,我在文档中看到它需要是 c++ 2011 标准或更高版本。我正在使用代码:块 IDE。我不断收到错误。关于不在范围内声明它的东西。你在使用 MSCV 吗?
【解决方案2】:

如果打印是您唯一关心的问题,您可以使用printf%g 格式。

默认情况下会打印六位有效数字,您可以使用足够长的数字宽度,例如.10

printf("%.10g",e); 

所以:

#include <iostream>
#include<cstdio>
int main()
{
    double b = 132.7489;
    double a = 49.932;
    double e = a + b;
    printf("%.10g",e);
}

【讨论】:

  • 如果我将 a & b 的值更改为 42.49887298340827342623974,%.10g 实际上不会显示更长的小数位。我需要像计算器一样的自动精​​度。我不必一直更改 %g 格式。
  • @JohnLalani 首先,double 最多只能占用 15 位数字,因此如果您想要如此高的精度,可以更改数据类型,其次您不需要每次都更改 %g 格式,只需添加足够大的数字宽度,具体取决于根据您想要的精度有多高,例如%.15g。由于计算器也有其精度限制。因此,您可以为自己设置任何精度限制并将其添加到%g 格式。
  • 哦,好的,所以我需要一个高精度的数据类型,谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-08-20
  • 2021-07-30
  • 1970-01-01
  • 2023-03-30
  • 2021-11-04
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多