我想做一个简单的计算:((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
}
答案 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(如果您的要求允许)。