【问题标题】:The average of an array in float format浮点格式数组的平均值
【发布时间】:2020-06-10 13:09:35
【问题描述】:

我如何得到除法的浮点结果?

虽然我将平均数组定义为浮点数。

int main()
{    
const int Number = 20; 
int Fibonacci[Number]; 
float average[Number];
for ( int i =0; i <= Number; i++ )
{
    if ( i == 0 ) 
       {Fibonacci[i] = 0;}
    else if ( i == 1 ) 
       {Fibonacci[i] = 1;}
    else 
       {Fibonacci[i] = Fibonacci[i -1] + Fibonacci[i -2];

        //average[i] = (Fibonacci[i -1] + Fibonacci[i -2])/2 ;   
       }
}

cout<< "The first 20 Fibonacci series numbers are: \n";
for ( int i = 1; i <= Number; i++)
{    cout<< Fibonacci[i]<<endl;

}



cout<< "The average adjacent array numbers are: \n";
for ( int i = 3; i <= Number; i++)
{   average[i] = (Fibonacci[i]/2);
    //cout.precision(0);

问题来了

    cout<< average[i]<<endl;     <-----here the problem!!
}

return 0;
}

感谢您的帮助。 提前致谢。

【问题讨论】:

  • 你在做整数除法。 Fibonacci 包含 int1 也是一个 int。您想先将其中一个值转换为浮点数。例如:average[i] = (Fibonacci[i]/2.f)
  • for ( int i =0; i &lt;= Number; i++ ) 应该是 for ( int i =0; i &lt; Number; i++ )。正如所写,循环的最后一次传递离开了数组的末尾。

标签: c++ c++11 c++14


【解决方案1】:

当你做除法时,你是在做一个整数除法,所以你不会得到浮点结果。一个简单的修复方法如下:

average[i] = Fibonacci[i] / 2.0f;

请注意,如果 / 的操作数之一是 float,那么您将得到浮点除法。

另外,请注意您的循环索引在数组中太远了。你需要在Number之前停下来,像这样:

for ( int i = 0; i < Number; i++)

这是因为有效的数组索引来自0 .. (Number - 1)

【讨论】:

    【解决方案2】:

    如果Fibonacci[i]int 类型,那么(Fibonacci[i]/2) 是一个整数除法,得到一个整数值(没有任何小数部分)。将此积分结果分配给浮点数不会改变您已执行积分除法的事实。

    您可以通过将其中一个操作数设为浮点值来强制进行浮点除法。

    所以 (1) 使用任何一个演员...

    ((float)Fibonacci[i])/2
    

    或(2)除以2.0f(这是一个浮点值):

    Fibonacci[i]/2.0f
    

    【讨论】:

    • 2.0double2.0ffloat
    【解决方案3】:

    只需像这样使用类型转换fibonacci 数组-

    average[i] = (float)Fibonacci[i]/2;

    因为为了获得浮点结果,/ 操作中使用的两个变量中的任何一个都必须是浮点数。

    【讨论】:

    • @PeteBecker 谢谢。我只是使用他的参考资料,修改最少。但是,我已经更新了我的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2019-04-23
    相关资源
    最近更新 更多