2017-07-05 114 views
0

我的C++程序需要三个整数输入并执行一些计算,包括除法。起初,最终结果不是小数。堆栈溢出(Dividing two integers to produce a float result)搜索过了一会儿,我发现我应该增加一个(浮动),像这样:C++整数除法到浮点数

int a; 
int b; 
float c; 

a = 5; 
b = 2; 

c = (float)a/b; 

所以我想,但我结束了我的结果是-NAN (IND)。首先,这是什么意思?第二,我如何让我的程序工作?

这里是我想在我的程序中做的数学计算方式。

int v; 
int e; 
int a; 
float r; 

r = ((float)e - v)/((float)a/1000); 

编辑:对不起,我错了。我打算在第二个例子中输入1000,而不是c。

+0

当你在第一个例子中使用'std :: cout << c'时,你会得到什么? – PYA

+1

不能重现,'c'对我来说是2.5。问题可能在于你如何检查'c'的值。 –

+3

您已经显示的第一个代码示例中没有任何内容会执行此操作;第二个代码示例是无意义的,因为它使用未初始化的变量。提供最小代码示例,您可以将其编译,运行并显示问题**。 –

回答

0

你必须像你的第一个例子一样初始化每个变量,并且给每个变量赋值。
尝试此:

int v; 
int e; 
int a; 
int c; 
float r; 



a = 5; 
c = 2; 
e = 5; 
v = 2; 

r = ((float)e - v)/(float)a/c; 
cout << r; 
+1

虽然这可能会回答问题,包括解释为什么/如何代码是一个答案会使它更好。 – NathanOliver

1

尝试将每个可变浮动,并看看是否能解决该问题。另外,在你的第二个例子中,你永远不会初始化你的变量,这会导致错误,因为执行是未定义的。你也忘了包含变量c。

看看,这将引发一个错误:

int v = 1; 
int e = 1; 
int a = 1; 
int c = 1; 
float r; 

r = ((float)e - (float)v)/(float)a/(float)c; 

此外,对于类型之间的转换,我会建议你使用的不是“(类型)变量”“的static_cast(变量)”。这是推荐使用C++类型进行类型转换的方式,并且它还使转换更易于在调试时发现。你的代码如下所示:

int v = 1; 
int e = 1; 
int a = 1; 
int c = 1; 
float r; 

r = (static_cast<float>(e) - static_cast<float>(v))/static_cast<float>(a)/static_cast<float>(c); 
+0

请注意,您甚至可以使用float r = ....作为最后的声明和分配。 –

+0

@HansOlsson这是真的!虽然我希望他们有代码来获取值,声明值和最后一行之间的v,e,a和c的值。 – Misha