计算返回零而不是预期结果

时间:2013-10-07 16:39:01

标签: c++ debugging math

我想做一个简单的计算:((45/100) - (20 + 50)/ 200)*(10 + 5)

我希望答案是1.5,但是当编译程序时,它显示为0.

有人能为我解决这个问题

#include <iostream>
using namespace std;

int main()
{
   float   CivIndex = ( (45/100) -  (20+50)/200 )
                  *(10+5);

   cout<<CivIndex; // expect 1.5 but getting 0
}

7 个答案:

答案 0 :(得分:4)

整数师!

当评估为整数时,

(45 / 100)等于0,而不是你希望的0.45。

使分子或分母成为浮点数以获得预期结果:

(45.0 / 100)

答案 1 :(得分:3)

您所做的是整数除法,整数除法将结果舍入为最接近的整数。要更正您的代码,请将其更改为:

#include <iostream>
using namespace std;

int main()
{
   float   CivIndex = ( (45.0/100.0) -  (20.0+50.0)/200.0 )
                  *(10.0+5.0);

   cout<<CivIndex; // expect 1.5 but getting 0
}

注意:并非所有.0都需要,但只需确保它们。

答案 2 :(得分:2)

你正在进行整数除法。

将其指定为浮点常量

 float   CivIndex = ( (45./100) -  (20+50)/200. )*(10+5);
                        ^ Notice decimal points^

答案 3 :(得分:2)

所有常量都是整数,因此,编译器正在进行整数数学运算。 45/100作为int是0.所以是70/200。 0 - 0 * 15 = 0.你需要告诉编译器你的常量是浮点数:20f或20.0都可以工作。 (对于每个操作,如果至少有一个常量是浮点数,则该操作将被视为浮点数学。)

答案 4 :(得分:2)

在C和其他几种语言中,跳过两个整数会得到一个整数(整数除法)。您的代码中的45 / 100将导致0而不是预期的0.45

修复很简单:将其中一个操作数转换为浮点数。

float   CivIndex = ( (45/100.0) -  (20+50)/200.0 )
              *(10+5);

答案 5 :(得分:1)

你希望整数除法为0.45,但实际上是0

尝试将其更改为:

 float   CivIndex = ( (45.0/100) -  (20.0+50.0)/200 )
              *(10+5);

答案 6 :(得分:0)

您实质上是在评估仅包含整数的表达式。所以 结果将是一个整数。 您可以在整数表达式的最终结果上使用casts。 e.g ..

int a=20;float b; b=(float)a;cout<<"b: "<<b;

请确认语法。

或者如上所述,您也可以将其中一个操作数作为float / double(如果您的要求允许)。