【问题标题】:Why does this factorial function return an int instead of a double为什么这个阶乘函数返回一个 int 而不是 double
【发布时间】:2015-04-21 17:22:30
【问题描述】:

在返回之前,该类型是双精度型,此时它会被剪裁为整数。为什么是这样?任何帮助将不胜感激。

using namespace std;

double fac_counter = 1.0;


int factorial(double n) {

    for (double i = 1.0; i <= n; i++)
    {
        fac_counter = double(fac_counter)*i;
    }
    return fac_counter; 
}

【问题讨论】:

  • 因为那是你在函数签名中写的。
  • 嗯,有趣的是,即使你将函数类型从int 更改为double,使用cout 时输出是int,但是当你使用printf() 时,你会得到一个 double 值,想知道为什么会这样。

标签: c++ function integer type-conversion double


【解决方案1】:
int factorial(double n)

改成

double factorial(double n)

你得到一个 int 的原因是你的函数的返回类型是 int 而你想要的是一个 double。

我还注意到你的代码有一个奇怪的行为。如果我使用

cout<<factorial(3);

我似乎得到了输出6 但是当我使用

printf("%lf",factorial(3));

我收到6.000000

【讨论】:

  • “我还注意到你的代码有一个奇怪的行为。如果我使用...”看看std::setprecision() et al。
  • @πάντα ῥεῖ,我尝试了cout&lt;&lt;setprecision(6)&lt;&lt;factorial(3);,但仍然得到相同的结果。
【解决方案2】:

您的返回类型是 int 将其更改为 double

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2016-06-15
    • 2015-04-15
    相关资源
    最近更新 更多