【问题标题】:Double multiplication giving rounded results双乘法给出四舍五入的结果
【发布时间】:2010-11-08 10:48:59
【问题描述】:
double a = 2451550;
double b = .407864;
double c= a*b;
cout<<c;

我期望结果是“999898.9892”,但得到的是“999899”。我需要实际的未舍入结果。请提出建议。

【问题讨论】:

标签: c++ double multiplication


【解决方案1】:

默认情况下,iostreams 输出 6 位精度。如果你想要更多,你必须要求它:

std::cout.precision(15);

【讨论】:

  • 谢谢,但实际问题是,我想将“c”结果用于其他计算,而不仅仅是用于显示。
  • @Vikas:再次阅读答案-您已经获得了所需的精度-您只是因为显示值的方式而感到困惑。
  • 您将获得 52 位的精度,但由于浮点运算的工作原理,它不会是“精确的”。
【解决方案2】:

也可以使用 Manipulator setprecision 来完成,如下所示。

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
 double a = 2451550;
 double b = .407864;
 double c= a*b;
 cout<<setprecision(15)<<c;
}

另外,操纵器的使用将使代码紧凑。

【讨论】:

    【解决方案3】:

    默认情况下,std::iostream 的精度将显示 total 要显示的位数,默认精度为 6。因此,由于您的数字 之前 有六位数> 小数点后不会显示任何小数位。

    您可以使用“固定”操纵器更改此行为。 'precision' 然后更改为表示要在小数点后显示的位数,这可能是您所期望的。

    要始终获得小数点后四位数,您可以这样做:

    cout << setprecision(4) << fixed << c;
    

    但是,请记住,这将始终显示小数点后的四位数字,即使它们是零。没有简单的方法来获得“精度”以表示 最多 x 使用 std::iostreams 小数点后的位数。

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多