1

我正在尝试做一个简单的计算:( (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
}
4

7 回答 7

4

整数除法!

(45 / 100)当评估为整数时等于 0,而不是您希望的 0.45。

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

(45.0 / 100)

于 2013-10-07T16:40:16.497 回答
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都是必需的,但只需将它们确定即可。

于 2013-10-07T16:42:23.863 回答
2

你正在做整数除法。

将其指定为浮点常量

 float   CivIndex = ( (45./100) -  (20+50)/200. )*(10+5);
                        ^ Notice decimal points^
于 2013-10-07T16:40:30.170 回答
2

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

于 2013-10-07T16:40:30.280 回答
2

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

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

float   CivIndex = ( (45/100.0) -  (20+50)/200.0 )
              *(10+5);
于 2013-10-07T16:40:40.710 回答
1

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

尝试将其更改为:

 float   CivIndex = ( (45.0/100) -  (20.0+50.0)/200 )
              *(10+5);
于 2013-10-07T16:40:58.377 回答
0

您实际上是在评估仅包含整数的表达式。所以结果将是一个整数。您可以对整数表达式的最终结果使用强制转换。例如。

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

请确认语法。

或者如上所述,您也可以将其中一个操作数设为浮点数/双精度数(如果您的要求允许)。

于 2013-10-07T17:11:21.530 回答